Mehrere scp-Threads gleichzeitig ausführen:
Hintergrund:
Ich finde mich oft dabei, eine Reihe von Serverdateien häufig zu spiegeln, und in diesen Serverdateien sind Tausende kleiner 1kb-3kb-Dateien enthalten. Alle Server sind mit 1-Gbit / s-Ports verbunden, die in der Regel in verschiedenen Rechenzentren verteilt sind.
Problem:
SCP überträgt diese kleinen Dateien, EINE für EINE, und es dauert ewig, und ich habe das Gefühl, dass ich die schönen Netzwerkressourcen verschwende, die ich habe.
Lösung?:
Ich hatte eine Idee; Erstellen eines Skripts, das die Dateien in gleiche Mengen aufteilt und 5-6 scp-Threads startet, die dann theoretisch 5-6 mal schneller erledigt würden, nicht wahr? Aber ich habe keine Erfahrung mit Linux-Skripten!
Fragen):
- Gibt es eine bessere Lösung für das erwähnte Problem?
- Gibt es so etwas schon?
- Wenn nicht, gibt es jemanden, der mir einen Anfang macht oder mir hilft?
- Wenn nicht zu 2 oder 3, wo wäre ein guter Ort, um Linux-Skripte zu lernen? Wie Bash oder andere.
linux
centos
scp
multi-threading
Caesay
quelle
quelle
Antworten:
Ich würde es so machen:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'
Abhängig von den Dateien, die Sie übertragen, kann es sinnvoll sein, die Komprimierung in den
tar
Befehlen zu aktivieren :tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
Es kann auch sinnvoll sein, eine CPU-freundlichere Verschlüsselung für den
ssh
Befehl auszuwählen (z. B. arcfour):tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'
Oder kombinieren Sie beide, aber es hängt wirklich davon ab, was Ihr Engpass ist.
Offensichtlich
rsync
wird es viel schneller sein, wenn Sie inkrementelle Synchronisierungen durchführen.quelle
Verwenden Sie
rsync
anstelle vonscp
. Sie könnenrsync
overssh
so einfach wie verwendenscp
und es unterstützt "Pipelining von Dateiübertragungen zur Minimierung der Latenzkosten".Ein Tipp: Wenn die Daten komprimierbar sind, aktivieren Sie die Komprimierung. Wenn nicht, deaktivieren Sie es.
quelle
Ich wollte gerade GNO Parallel vorschlagen (was noch einige Skriptarbeiten von Ihrer Seite erfordert), aber dann fand ich pscp (das Teil von pssh ist ). Das passt vielleicht genau zu Ihren Bedürfnissen.
quelle
pssh
gleichzeitig mit mehreren Maschinen zu arbeiten. Ich glaube nicht, dass es Parallelität auf Dateiebene implementiert.Möglicherweise ohne Bezug, aber wenn Sie etwas mehr in Echtzeit möchten, können Sie GlusterFS ausprobieren . Funktioniert gut, erfordert jedoch einige Anpassungen, wenn Sie kleine Dateien effizient lesen möchten.
quelle
Nicht scp direkt, aber eine Option für die Übertragung mit mehreren Threads (auch für einzelne Dateien) ist bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp .
Verwenden Sie die Option -s für die Anzahl der Threads, die Sie Daten übertragen möchten. Hervorragend geeignet für Verbindungen mit hoher Bandbreite, aber Verzögerung, da die Verzögerung die Größe des TCP-Fensters pro Thread begrenzt.
quelle