Frage Kopieren Sie große Dateien von einem Linux-Server auf einen anderen


Ich versuche, einen 75 Gigabyte tgz (mysql lvm Schnappschuss) von einem Linux Server in unserem LA Datenzentrum zu einem anderen Linux Server in unserem NY Datenzentrum über eine 10MB Verbindung zu kopieren.

Ich bekomme ungefähr 20-30Kb / s mit rsync oder scp, der zwischen 200-300 Stunden fluktuiert.

Im Moment ist es eine relativ ruhige Verbindung, da das zweite Datenzentrum noch nicht aktiv ist und ich durch kleine Dateiübertragungen ausgezeichnete Geschwindigkeiten erreicht habe.

Ich habe verschiedene tcp Tuning-Guides, die ich über Google gefunden habe, vergeblich verfolgt (vielleicht lese ich die falschen Guides, habe ich einen guten bekommen?).

Ich habe den tar + netcat-Tunnel-Tipp gesehen, aber mein Verständnis ist, dass es nur gut für viele kleine Dateien ist und Sie nicht aktualisiert, wenn die Datei effektiv übertragen wurde.

Bevor ich auf die Lieferung einer Festplatte zurückgreifen kann, hat irgendjemand einen guten Input?

AKTUALISIEREN:  Nun ... es könnte die Verbindung nachher sein :( Siehe meine Tests unten ...

Transfers von NY nach LA:

Eine leere Datei erhalten.

[nathan@laobnas test]$ dd if=/dev/zero of=FROM_LA_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.412 seconds, 164 MB/s
[nathan@laobnas test]$ scp -C obnas:/obbkup/test/FROM_NY_TEST .
FROM_NY_TEST                                    3%  146MB   9.4MB/s   07:52 ETA

Schnappschuss-Tarball erhalten.

[nathan@obnas db_backup]$ ls -la db_dump.08120922.tar.gz
-rw-r--r-- 1 root root 30428904033 Aug 12 22:42 db_dump.08120922.tar.gz

[nathan@laobnas test]$ scp -C obnas:/obbkup/db_backup/db_dump.08120922.tar.gz .
db_dump.08120922.tar.gz            0%   56MB 574.3KB/s 14:20:40 ET

Transfers von LA nach NY:

Eine leere Datei erhalten.

[nathan@obnas test]$ dd if=/dev/zero of=FROM_NY_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.2501 seconds, 165 MB/s
[nathan@obnas test]$ scp -C laobnas:/obbkup/test/FROM_LA_TEST .
FROM_LA_TEST                                    0% 6008KB 497.1KB/s 2:37:22 ETA

Gettting der Schnappschuss Tarball.

[nathan@laobnas db_backup]$ ls -la db_dump_08120901.tar.gz
-rw-r--r-- 1 root root 31090827509 Aug 12 21:21 db_dump_08120901.tar.gz

[nathan@obnas test]$ scp -C laobnas:/obbkup/db_backup/db_dump_08120901.tar.gz .
db_dump_08120901.tar.gz                0%  324KB  26.8KB/s 314:11:38 ETA

Ich nehme an, ich nehme es mit den Leuten auf, die unsere Einrichtungen betreiben, der Link wird als MPLS / Ethernet 10MB Link bezeichnet. (zucken)


20
2017-08-13 02:07


Ursprung


Nur ein Kommentar, ich habe kürzlich eine Freigabe von einem Softwareanbieter auf einem Seagate FreeAgent (USB-Datenträger) erhalten, die etwa 50 GByte betrug. Das betreffende Unternehmen hatte eine Webpräsenz und forderte Kunden in der Regel auf, einfach von ihrer Website herunterzuladen. Dachte, es war eine interessante Lösung und dachte, dass dies einige Informationen hinzufügen könnte, um bei Ihrer Entscheidung zu helfen. - mdpc
Welche Art von Latenz siehst du? - retracile
Ungefähr 80 ms über den Link. - Nathan Milford
Ja, jetzt bin ich nur verwirrt und frustriert. Ich habe es in 50mb Chunks aufgeteilt und es geht immer noch langsam! Aber rsyncing andere Daten bekommen 500kb / s ... da muss etwas furchtbar falsch sein, ehre ich vermisse .... - Nathan Milford
Untersuchen Sie Ihren Datenverkehr mit tcpdump. Es kann Ihnen helfen, herauszufinden, was die Übertragung verlangsamt. - lexsys


Antworten:


Sneakernet Jeder?

Angenommen, es handelt sich um eine einmalige Kopie, ist es nicht möglich, die Datei einfach auf eine CD (oder ein anderes Medium) zu kopieren und sie über Nacht zum Ziel zu bringen?

Das könnte Ihre schnellste Option sein, da eine Dateiübertragung dieser Größe über diese Verbindung möglicherweise nicht korrekt kopiert wird. In diesem Fall müssen Sie erneut beginnen.


rsync

Meine zweite Wahl / mein Versuch wäre rsync, da er fehlgeschlagene Übertragungen, teilweise Übertragungen usw. erkennt und von dort wieder aufnehmen kann, wo er aufgehört hat.

rsync --progress file1 file2 user@remotemachine:/destination/directory

Die --progress-Flagge gibt dir Feedback, anstatt nur da zu sitzen und dich selbst zu überlegen. :-)


Vuze (Bittorrent)

Die dritte Möglichkeit wäre wahrscheinlich, Vuze als Torrent-Server zu verwenden und dann Ihren Remote-Standort einen standardmäßigen bitorrent-Client zum Herunterladen verwenden zu lassen. Ich weiß von anderen, die das getan haben, aber Sie wissen ... bis sie alles eingerichtet haben, laufen, etc ... Ich hätte die Daten überbewerten können ...

Hängt von deiner Situation ab.

Viel Glück!


AKTUALISIEREN:

Weißt du, ich habe ein bisschen mehr über dein Problem nachgedacht. Warum muss die Datei ein einziger großer Tarball sein? Tar ist perfekt in der Lage, große Dateien in kleinere zu spalten (zB um Medien zu überspannen). Warum also nicht den riesigen Tarball in besser manierbare Teile aufteilen und dann die Teile stattdessen übertragen?


15
2017-08-13 03:30



+1, obwohl in diesem Fall wahrscheinlich nicht kosteneffizient. Unterschätzen Sie nie die Bandbreite einer 747 Festplatten voll :) - Chad Huneycutt
Ich konnte den Link nicht finden, aber Google hat vor ein paar Jahren Versandkisten mit Laufwerken angeschaut. Wenn Sie eine Kiste von Laufwerken mit insgesamt 500 TB von A nach B schieben können, so wie Sie es schneiden, ist das eine ziemlich feine Bandbreite - STW
Vielleicht beziehen Sie sich auf diesen Artikel: arstechnica.com/science/news/2007/03/... - KPWINC
Ja, ich habe eine Festplatte ausgeliefert. Das wirkliche Problem, so wurde mir gesagt, war die Flusskontrolle auf dem / den Switch (s). - Nathan Milford
Bittorrent funktioniert nur dann besser als eine direkte Übertragung, wenn Sie mehrere Sämaschinen haben. Selbst wenn OP BT auf mehreren Rechnern installiert, hat er nur eine Verbindung. Und er hat bereits festgestellt, dass mehrere kleine Dateien nicht schneller als eine große Datei sind, die den Finger auf die Netzwerkverbindung zeigt. - Xalorous


Ich habe das in der Vergangenheit mit einer 60GB tbz2-Datei gemacht. Ich habe das Skript nicht mehr, aber es sollte einfach zu schreiben sein.

Teilen Sie Ihre Datei zunächst in Stücke von ~ 2 GB auf:

split --bytes=2000000000 your_file.tgz

Berechnen Sie für jedes Stück einen MD5-Hash (um die Integrität zu prüfen) und speichern Sie es irgendwo, dann beginnen Sie, die Stücke und ihre MD5 mit einem Tool Ihrer Wahl (mir: netcat-tar-pipe in einem Bildschirm) auf die entfernte Seite zu kopieren Session).

Nach einer Weile, überprüfen Sie mit dem MD5, ob Ihre Stücke in Ordnung sind, dann:

cat your_file* > your_remote_file.tgz

Wenn Sie auch ein MD5 der Originaldatei erstellt haben, überprüfen Sie es ebenfalls. Wenn es in Ordnung ist, können Sie Ihre Datei entpacken, alles sollte in Ordnung sein.

(Wenn ich die Zeit finde, werde ich das Skript umschreiben)


7
2017-08-13 17:24





Normalerweise bin ich ein großer Befürworter von rsync, aber wenn man eine einzelne Datei zum ersten Mal überträgt, scheint es nicht viel Sinn zu machen. Wenn Sie jedoch die Datei mit nur geringen Unterschieden erneut übertragen, wäre rsync der klare Gewinner. Wenn Sie sich trotzdem für rsync entscheiden, empfehlen wir dringend, ein Ende zu verwenden --daemon Modus, um den Performance-tötenden SSH-Tunnel zu eliminieren. Die man-Seite beschreibt diesen Modus ziemlich gründlich.

Meine Empfehlung? FTP oder HTTP mit Servern und Clients, die das Fortsetzen unterbrochener Downloads unterstützen. Beide Protokolle sind schnell und leicht und vermeiden den ssh-Tunnel-Nachteil. Apache + wget würde schnell schreien.

Der netcat Pipe Trick würde auch gut funktionieren. Bei der Übertragung einer einzelnen großen Datei ist kein Teer erforderlich. Und der Grund, warum es Sie nicht benachrichtigt, wenn es fertig ist, ist, weil Sie es nicht gesagt haben. Füge hinzu ein -q0 Flag auf der Server-Seite und es wird sich genau so verhalten, wie Sie es erwarten würden.

Server $ nc -l -p 5000> outfile.tgz

Client $ nc -q0 server.beispiel.com 5000 <infile.tgz

Der Nachteil des Netcat-Ansatzes ist, dass Sie nicht weitermachen können, wenn Ihre Übertragung 74 GB in ...


5
2017-08-13 10:32



+1 für rsyncd. Ich benutze es tatsächlich für Übertragungen in meinem LAN, weil ich im Vergleich zu CIFS oder NFS einen höheren Durchsatz sehe. - Ophidian
Während FTP und HTTP die "ssh-tunnel penalty" vermeiden, muss die "Strafe" für die Nichtverschlüsselung der Daten berücksichtigt werden. - J.Money


Gib netcat (manchmal auch nc genannt) einen Schlag. Folgendes funktioniert in einem Verzeichnis, aber es sollte einfach genug sein, um nur eine Datei zu bearbeiten.

Auf dem Zielfeld:

netcat -l -p 2342 | tar -C /target/dir -xzf -

Auf dem Quellfeld:

tar czf * | netcat target_box 2342

Sie können versuchen, die 'z' Option in beiden tar-Befehl für ein bisschen mehr Geschwindigkeit zu entfernen, da die Datei bereits komprimiert ist.


3
2017-08-13 02:19





Standard SCP und Rsync (die SCP verwendet) sind sehr langsam für große Dateien. Ich denke, ich würde versuchen, ein Protokoll mit geringerem Overhead zu verwenden. Haben Sie versucht, einen einfacheren Verschlüsselungscode zu verwenden, oder überhaupt nicht? Schau mal in die --rsh Option für rsync, um die Übertragungsmethode zu ändern.

Warum nicht FTP oder HTTP?


1
2017-08-13 02:18



Ich habe den alten 'python -m SimpleHTTPServer' von commandlinefu auf der Quelle und wget'd die Datei auf dem Ziel. Ich bekomme immer noch "18.5K / s eta 15d 3h" - Nathan Milford


Obwohl BitTorrent ein bisschen Overhead in die Situation bringt, ist BitTorrent eine wirklich nette Lösung für die Übertragung großer Dateien. BitTorrent hat viele nette Funktionen wie das native Chunking einer Datei und die Überprüfung jedes einzelnen Chunks, der bei Beschädigung erneut übertragen werden kann.

Ein Programm wie Azureus [jetzt bekannt als Vuze] enthält alle Teile, die Sie benötigen, um Torrents in einer App zu erstellen, zu laden und zu laden. Im Hinterkopf Azureus ist nicht die schlankste Lösung, die für BitTorrent verfügbar ist. Ich denke, dass auch die GUI benötigt wird - es gibt eine Menge von Kommandozeilen-basierten Torrent-Tools für Linux.


1
2017-08-13 02:52



bt geht nur schneller als direkte Übertragung, wenn es mehrere Samen gibt. Er hat eine einzige Quelle. Noch wichtiger ist, dass er ein einziges Quellnetzwerk mit einer schlechten Netzwerkverbindung hat. Auch wenn Sie die Datei lokal auf mehrere Speicherorte kopieren, ist das Einrichten von Bt mit mehreren Seeds aufgrund dieser schlechten Verbindung kontraproduktiv. Wenn Sie mehrere Kopien erstellen und als Seeds einrichten, wird die Kopierzeit multipliziert, anstatt sie zu reduzieren. BT könnte eine praktikable Lösung sein, wenn OP versucht, eine große Datei für mehrere Empfänger verfügbar zu machen. - Xalorous


Nun, persönlich, 20-30Kb / s scheint ziemlich niedrig für eine 10 MB (unter der Annahme 10 MB und nicht 10 MB) Link.

Wenn ich du wäre, würde ich eines von zwei Dingen tun (vorausgesetzt, physischer Zugang ist nicht verfügbar) -

Entweder ich empfehle Ihnen, die große Datei in kleinere Stücke zu teilen, etwa 500 MB.

Wenn Sie die kleineren Chunks haben, verwenden Sie entweder rsync erneut, oder ich persönlich bevorzuge es, eine private Secure ftp-Sitzung zu verwenden und anschließend die Dateien nach Abschluss zu CRC zu konvertieren.


0
2017-08-13 02:21





Ein paar Fragen könnten in den Diskussionen helfen: Wie wichtig sind die zu übertragenden Daten? Ist dies für Disaster Recovery, Hot Backup, Offline Storage oder was? Möchten Sie die Datenbank sichern, während sie auf oder ab ist? Was ist mit der Einrichtung einer Datenbank auf dem Remote-System und halten Sie sie synchron mit entweder Clustering oder Aktualisierung über Changelogs (ich bin nicht völlig versiert auf die Fähigkeiten eines MySql-Datenbank-System). Dies kann dazu beitragen, die Menge der Daten zu reduzieren, die über die Verbindung übertragen werden müssen.


0
2017-08-13 02:58



Es ist ein LVM-Snapshot eines anderen MYSQL-Replikats (unserer Haupt-MYSQL-Instanz an anderer Stelle). Einmal übertragen und lokalisiert, kann die Ziel-mysql-Instanz einfach den Unterschied zwischen diesem Snapshot aktualisieren (benutze ihn als Delta) und wo der Master gerade ist. Das es eine MYSQL-Sicherung ist, ist nicht relevant, es ist nur ein großer Teil der Daten, die ich nur einmal verschieben muss. - Nathan Milford