Maximierung der Rsync-Leistung und des Durchsatzes - direkt verbundene Gigabit-Server

27

Ich habe zwei Dell R515-Server mit CentOS 6.5, von denen jeweils einer direkt mit dem anderen verbunden ist. Ich verwende die direkte Verbindung, um Backups vom Hauptserver im Paar jede Nacht mit rsync über ssh auf den sekundären Server zu übertragen. Bei der Überwachung des Datenverkehrs sehe ich einen Durchsatz von ~ 2 MBit / s, was viel weniger ist, als ich von einem Gigabit-Port erwarten würde. Ich habe die MTU auf beiden Seiten auf 9000 eingestellt, aber das schien nichts zu ändern.

Gibt es eine empfohlene Reihe von Einstellungen und Optimierungen, mit denen ich den maximal verfügbaren Durchsatz erzielen kann? Da ich rsync over ssh (oder möglicherweise nur NFS) verwende, um Millionen von Dateien (~ 6 TB kleiner Dateien - ein riesiger Zimbra-Mailspeicher) zu kopieren, müssen die Optimierungen, nach denen ich suche, möglicherweise spezifischer für meinen speziellen Anwendungsfall sein .

Ich benutze ext4 auf beiden Seiten, wenn das wichtig ist

Vielen Dank

BEARBEITEN: Ich habe die folgenden rsyncOptionen mit ziemlich ähnlichen Ergebnissen verwendet:

rsync -rtvu --delete source_folder/ destination_folder/

rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/

Gegenwärtig sehe ich die gleiche schlechte Leistung, wenn ich cpeinen NFS-Export über dieselbe direkte Kabelverbindung verwende.

EDIT2: Nach Abschluss der Synchronisierung konnte ich ausführen iperfund stellte fest, dass die Leistung bei 990 Mbit / s lag. Die Verlangsamung war auf den tatsächlich verwendeten Datensatz zurückzuführen.

dyasny
quelle
1
Sie sollten rsync zu Ihren Tags hinzufügen. Haben Sie die Uhrzeit für den Auflistungsteil von rsync überprüft? Der niedrige Durchsatz kann auf kleine Dateien zurückzuführen sein. Können Sie Ihren rsync-Befehl veröffentlichen, um die Optionen zu überprüfen?
Kranteg
@ Kranteg finden Sie unter Bearbeiten
dyasny
2
Bitte überprüfen Sie die Konnektivität mit iperf.
ewwhite
yup, iperf zeigt 991mbits / s, ich denke, es ist der Datensatz, der so langsam war
dyasny
Mit rsync und einem Dataset mit kleinen Dateien können Sie keinen guten Throuphput erzielen. Sie sollten unbedingt Teer probieren.
Kranteg

Antworten:

24

Die Anzahl der Dateien und der SSH-Verschlüsselungsaufwand sind wahrscheinlich die größten Hindernisse. Bei einer solchen Übertragung wird die Übertragungsgeschwindigkeit nicht angezeigt.

Zu den zu verbessernden Optionen gehören:

  • Verwendung von rsync + SSH mit einem kostengünstigeren Verschlüsselungsalgorithmus (zB -e "ssh -c arcfour")
  • Vollständige Beseitigung der Verschlüsselung über den SSH-Transport mit so etwas wie HPN-SSH .
  • Blockbasierte Überweisungen. Snapshots, dd, ZFS Snapshot Senden / Empfangen etc.
  • Wenn es sich um eine einmalige oder seltene Übertragung handelt, verwenden Sie tarnetcat ( nc), mbuffer oder eine Kombination davon.
  • Überprüfen Sie Ihre CentOS- tuned-admEinstellungen .
  • Das Entfernen der Zeit von Ihrem Dateisystem wird aktiviert. Untersuchen anderer Einhängeoptionen für Dateisysteme.
  • NIC-Sende- / Empfangspuffer.
  • Optimieren Sie Ihren rsyncBefehl. Wäre hier -Wdie Option "Ganze Dateien" sinnvoll? Ist die Komprimierung aktiviert?
  • Optimieren Sie Ihr Speichersubsystem für die Art der Übertragung (SSDs, Spindelanzahl, RAID-Controller-Cache).
ewwhite
quelle
Ich habe SSH für NFS gelöscht und sehe fast die gleichen Ergebnisse. Blockbasierte Übertragungen sind geplant. Wechseln Sie zu LVM-Snapshot-basierten Sicherungen, und übertragen Sie die Sicherungen auf den zweiten Server, auf dem ZFS für die Deduplizierung ausgeführt wird. atime ist auf beiden Seiten deaktiviert. Es wird keine Komprimierung verwendet. Wie optimiere ich die Speichersubsysteme für diese Art der Übertragung? Die Quelle verfügt über zwei RAID10 über 12x 10k SAS-Laufwerke, eines auf den lokalen Laufwerken und das andere über ein MD1220. Der Sicherungsserver verfügt über dieselbe Anzahl an Festplatten, jedoch mit großen SATA-Laufwerken, und verwendet RAID5. Voller Cache für H800- und H700-Controller auf beiden Seiten. 2 MBit / s (von iftop) ~
dyasny
~ lässt mich denken, dass die Vernetzung hier dennoch der Engpass ist.
dyasny
@dyasny Testen Sie Ihr Netzwerk mit iperf, um sicherzugehen.
Ewwhite
1
Stellen Sie sicher, dass die Zielverzeichnisstruktur von rsyncund nicht von erstellt wurde cp. Ich habe gesehen rsync, dass es viel länger cpdauert, einen Remote-Verzeichnisbaum zu aktualisieren, der ursprünglich erstellt wurde von : 88 GB, aktualisiert mit Prüfsummen in 1h26m statt 3h! Wie Sie das anfängliche Festplattenlayout erstellen, ist entscheidend, um eine gute Update-Leistung zu erzielen. Die CPU-Zeit ist gleich; Die Echtzeit kann sich verdoppeln. (Das gleiche Update ohne Checkumming läuft in 13 Minuten von einer SSD auf eine 200GB Seagate).
Ian D. Allen
3

Wie Sie wahrscheinlich wissen, ist das Kopieren vieler kleiner Dateien (z. B. Postfächer im MailDir-Format oder ähnlichem) definitiv nicht die beste Option, um die Vorteile von Schnittstellen mit hoher Bandbreite zu nutzen. Auch dafür ist SSH wahrscheinlich nicht das beste Transportprotokoll. Ich würde versuchen, tar zu verwenden, um einen Tarball auf dem Quellhost zu erstellen, bevor er an den sekundären Host gesendet wird.

tar c /var/mail | ssh root@secondary-host 'tar x -C /var/backups'

Wenn Sie eine Teilsicherung benötigen, können Sie die -gOptionen von tar ausprobieren . Wenn Sie den Throuput noch maximieren müssen, versuchen Sie, netcat anstelle von ssh zu verwenden.

alxgomz
quelle
Ich habe zu NFS anstelle von SSH gewechselt, um den Verschlüsselungsaufwand zu beseitigen, keine Freude
dyasny
Haben Sie versucht, Teer zu verwenden? Als ersten Schritt können Sie versuchen, ein lokales Tarbal auf dem Primärserver zu erstellen und es dann über die Leitung zu übertragen. (oder testen Sie Ihr Netzwerk mit iperf wie @ewwhite suggeted)
Alxgomz
Ich würde, wenn ich lokalen Raum hätte, um zu sparen. Dies ist ziemlich riesig, auch mit einer voll besetzten DAS-Box
dyasny
dann versuche es über netcat oder ssh zu
leiten
Ich werde Schalt Backups später zu blockieren, und ich beabsichtige , zu Rohr dddurch ncdann. aber im
Moment
1

Versuchen Sie, die beitragenden Faktoren auseinanderzuhalten:

  • CPU (zB DD von / dev / zero durch Loopback geleitet)
  • Festplatten-E / A (z. B. DD einer großen Datei, die an cat> / dev / null weitergeleitet wird [wird weitergeleitet, um Kurzschlüsse zu vermeiden])
  • physische Netzwerk-E / A
  • etc.

und testen sie unabhängig.

Ich habe einige schlechte Erfahrungen mit Broadcom-Treibern gemacht, daher ist mein erster Vorschlag, die nutzbare Netzwerkbandbreite zu testen mit: dd if=/dev/zero bs=1m count=10k | rsh backup_host cat \> /dev/null

Scott Leadley
quelle
Oder iperf ...
ewwhite