Ich habe ein Shell-Skript, das weiterhin große Dateien (2 GB bis 5 GB) zwischen Remote-Systemen kopiert. Die schlüsselbasierte Authentifizierung wird bei der Agentenweiterleitung verwendet und alles funktioniert. Zum Beispiel: Angenommen, das Shell-Skript wird auf Maschine A ausgeführt und kopiert Dateien von Maschine B nach Maschine C.
"scp -Cp -i privater Schlüssel ssh_user @ Quell-IP: Quellpfad ssh_user @ Ziel-IP: Zielpfad"
Jetzt ist das Problem, dass der Prozess sshd kontinuierlich viel CPU beansprucht.
Zum Beispiel: top -c auf dem Zielcomputer (dh Computer-C) wird angezeigt
PID BENUTZER PR NI VIRT RES SHR S% CPU% MEM ZEIT + BEFEHL 14580 ssh_user 20 0 99336 3064 772 R 85,8 0,0 0: 05,39 sshd: ssh_user @ notty 14581 ssh_user 20 0 55164 1984 1460 S 6.0 0.0 0: 00.51 scp -p -d -t / home / binär / instanzen / instanz-1 / benutzer-2993 /
Dies führt zu einem hohen Lastdurchschnitt.
Ich glaube, dass scp so viel CPU benötigt, weil es Daten verschlüsselt / entschlüsselt. Aber ich brauche nicht verschlüsselte Datenübertragung als auch Maschine-B und Maschine-C ist in einem LAN.
Welche anderen Optionen habe ich? Ich dachte über 'rsync' nach. Aber die rsync-Manpage sagt:
ALLGEMEINES Rsync kopiert Dateien entweder auf oder von einem Remote-Host oder lokal auf dem aktuellen Host (das Kopieren von Dateien zwischen zwei wird nicht unterstützt Remote-Hosts).
Edit 1: Ich benutze bereits ssh cipher = arcfour128. Kleine Verbesserung, aber das löst mein Problem nicht.
Bearbeiten 2: Auf den Computern werden andere Binärdateien (meine Hauptanwendung) ausgeführt, und ein hoher Lastdurchschnitt führt zu einer schlechten Leistung.
-l limit
die Übertragungsgeschwindigkeit mit der Option begrenzen. Dies sollte auch die CPU-Auslastung verringern.rsync
ssh ist, genau wie beiscp
.Antworten:
Dieses Problem kann mit gelöst werden
rsync
. Zumindest sollte diese Lösung hinsichtlich der Leistung wettbewerbsfähig sein.Erstens
rsync
kann von einem der entfernten Systeme aufgerufen werden, um die Einschränkung der Unfähigkeit zu überwinden, direkt zwischen zwei entfernten Systemen zu kopieren.Zweitens kann die Verschlüsselung / Entschlüsselung vermieden werden, indem
rsync
im Daemon Access-Modus anstelle des Remote Shell Access-Modus ausgeführt wird.Im Daemon-Zugriffsmodus
rsync
wird der Datenverkehr nicht über eine SSH-Verbindung getunnelt. Stattdessen verwendet es ein eigenes Protokoll zusätzlich zu TCP.Normalerweise führen Sie den rsync-Daemon von inet.d oder eigenständig aus. Dies erfordert jedoch Root-Zugriff auf eines der Remote-Systeme. Vorausgesetzt, der Root-Zugriff ist nicht verfügbar, kann der Daemon weiterhin gestartet werden.
Starten Sie den
rsync
Daemon als nicht privilegierten Benutzer auf dem ZielcomputerKopieren Sie die Dateien tatsächlich
quelle
Die am wenigsten überschattete Lösung wäre die Verwendung von Netcat:
(Einige Netcat-Versionen benötigen das "-p" -Flag für den Port nicht.)
Dazu werden lediglich die unverschlüsselten Daten, die nicht authentifiziert sind, über das Netzwerk von einem PC zum anderen gesendet. Natürlich ist es nicht die "bequemste" Art, dies zu tun.
Andere Alternativen wären der Versuch, die SSH-Verschlüsselung (ssh -c) zu ändern, oder die Verwendung von FTP.
PS: rsync funktioniert gut mit Remote-Maschinen, wird aber meistens in Kombination mit ssh verwendet, daher hier keine Beschleunigung.
quelle
Wenn die Verschlüsselung kein Problem darstellt, aktivieren Sie einen NFS-Dämon
C
und stellen Sie das Verzeichnis bereitB
. Verwenden Sie rsync run onB
, geben Sie jedoch die lokalen Verzeichnispfade an.Ignorieren Sie
A
einfachssh user@B rsync...
den Befehl , bevor Sie den Anwendungsfall für die Einbeziehung ignorieren .Überträgt Daten ohne Verschlüsselungsaufwand und überträgt nur die verschiedenen Dateien.
Außerdem wurde FTP mit Server-zu-Server-Übertragungen von Drittanbietern als Protokollfunktion erstellt.
quelle
Sie können eine Methode mit geringer Verschlüsselung verwenden: Sie können
rsync --rsh="ssh -c arcfour"
die Geschwindigkeit erhöhen. Ich habe meine Tests, ich warte auf Festplatten und nicht mehr auf die Netzwerkverbindung. Und benutze rsync, es ist gut!quelle
Probieren Sie es gemeinsam aus. Ist die beste Option zum Synchronisieren von Dateien.
quelle
Vielleicht finden Sie http://rightsock.com/~kjw/Ramblings/tar_v_cpio.html so interessant.
Es parallelisiert Datenübertragungen zwischen zwei Hosts. Achten Sie besonders auf Punkt nr. 5, und passen Sie sich entsprechend Ihren Bedürfnissen an.
quelle
Ich weiß, das würde ein bisschen Arbeit erfordern , aber würde DRDB für Sie funktionieren? Es ist wie bei einem netzwerkbasierten RAID, und es ist viel einfacher, zwei Server synchron zu halten, wenn der Fall Ihrem ähnlich ist, zumindest wenn Sie nur Server A zum Kopieren auf Server B und nicht immer auch von B nach A benötigen.
quelle