Exécution simultanée de plusieurs threads scp

11

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.
césar
la source

Réponses:

11

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 tarcommandes:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

Il peut également être judicieux de choisir un chiffrement plus convivial pour la sshcommande (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 rsyncsera beaucoup plus rapide si vous effectuez des synchronisations incrémentielles.

truqueur
la source
10

Utilisez rsyncau lieu de scp. Vous pouvez utiliser rsyncplus sshaussi facilement scp, 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.

David Schwartz
la source
Je viens de faire un transfert hier soir avec scp et je fais un autre transfert similaire avec rsync - cela semble beaucoup plus rapide. Cependant, il semble toujours transférer un fichier à la fois - n'importe quelle idée pour faire cela avec plusieurs threads (Beyond --include'ing et --exclude'ing un tas de répertoires via un script; voir: sun3.org/archives / 280 )
aendrew
Il est inutile de transférer plusieurs fichiers en même temps étant donné la bande passante limitée. Je crois que vous ne considérerez pas cette commande lorsque la bande passante est abondante. L'élimination du coût de latence a déjà beaucoup aidé lorsque vous copiez de nombreux petits fichiers. Même si vous pouvez copier plusieurs fichiers en même temps, la bande passante limitée n'accélérera pas votre transfert de fichiers.
Joe
1

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.

Rilindo
la source
1
Il semble psshfonctionner simultanément sur plusieurs machines. Je ne pense pas qu'il implémente le parallélisme au niveau des fichiers.
David Schwartz
Je devrais probablement être précis - je voulais dire pscp.
Rilindo
1

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.

thetoolman
la source
0

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.

Kyle
la source