Exécution simultanée de plusieurs threads scp:
Contexte:
Je me retrouve souvent à mettre en miroir un ensemble de fichiers de serveur, et dans ces fichiers de serveur se trouvent des milliers de petits fichiers de 1 Ko à 3 Ko. Tous les serveurs sont connectés à des ports 1 Gbit / s, généralement répartis dans une variété de centres de données.
Problème:
SCP transfère ces petits fichiers, UN par UN, et cela prend des siècles, et j'ai l'impression de gaspiller les belles ressources réseau dont je dispose.
Solution?:
J'avais une idée; Créer un script, qui divise les fichiers en quantités égales, et démarre 5-6 threads scp, ce qui théoriquement se ferait alors 5-6 fois plus vite, non? Mais je n'ai aucune expérience de script Linux!
Des questions):
- Existe-t-il une meilleure solution au problème mentionné?
- Y a-t-il déjà quelque chose comme ça qui existe?
- Sinon, y a-t-il quelqu'un qui pourrait me donner un coup de pouce ou m'aider?
- Sinon à 2 ou 3, où serait un bon endroit pour commencer à chercher à apprendre les scripts Linux? Comme bash, ou autre.
linux
centos
scp
multi-threading
césar
la source
la source
Réponses:
Je le ferais comme ça:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'
Selon les fichiers que vous transférez, il peut être judicieux d'activer la compression dans les
tar
commandes:tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
Il peut également être judicieux de choisir un chiffrement plus convivial pour la
ssh
commande (comme arcfour):tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'
Ou combinez les deux, mais cela dépend vraiment de votre goulot d'étranglement.
De toute évidence, ce
rsync
sera beaucoup plus rapide si vous effectuez des synchronisations incrémentielles.la source
Utilisez
rsync
au lieu descp
. Vous pouvez utiliserrsync
plusssh
aussi facilementscp
, et il prend en charge « pipelining des transferts de fichiers afin de minimiser les coûts de latence ».Un conseil: si les données sont compressibles, activez la compression. Si ce n'est pas le cas, désactivez-le.
la source
J'étais sur le point de suggérer GNO Parallel (qui nécessite encore un peu de travail de script de votre part), mais j'ai ensuite trouvé pscp (qui fait partie de pssh ). Cela peut juste correspondre à vos besoins.
la source
pssh
fonctionner simultanément sur plusieurs machines. Je ne pense pas qu'il implémente le parallélisme au niveau des fichiers.Pas scp directement, mais une option pour le transfert multithread (même sur des fichiers uniques) est bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .
utilisez l'option -s pour le nombre de threads que vous souhaitez transférer des données. Idéal pour les connexions à bande passante élevée mais avec décalage, car le décalage limite la taille de la fenêtre TCP par thread.
la source
Peut-être sans rapport, mais si vous voulez quelque chose de plus en temps réel, vous pouvez essayer GlusterFS . Fonctionne bien, mais nécessite quelques réglages si vous souhaitez lire efficacement de petits fichiers.
la source