Wenn :
- Die Änderungszeit Ihrer Dateien ist richtig
- Die Dateien sind nicht wirklich groß
- Es kann kein Push übersehen werden (oder es gibt eine Art Rückstandsverarbeitung).
Sie können eine Liste der seit der letzten Ausführung geänderten Dateien verwenden find -ctime
oder file -cnewer
erstellen und nur die geänderten Dateien kopieren (nur ein verherrlichter Differential-Push).
Dies hat sich für mehrere Hosts recht gut übersetzt: Führen Sie einfach einen differenziellen Teer für die Quelle aus und entpacken Sie ihn für alle Hosts.
Es gibt Ihnen so etwas:
find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt
for HOST in host1 host2 host3 ...
do
cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
done
Das Skript muss verfeinert werden, aber Sie haben die Idee.
Unter der Annahme, dass die Daten, die Sie synchronisieren, noch nicht komprimiert sind, wird das Aktivieren der Komprimierung (-z) wahrscheinlich die Übertragungsgeschwindigkeit auf Kosten einiger CPUs an beiden Enden verbessern.
quelle
Wenn Sie sehr große Dateien mit vielen Änderungen übertragen, verwenden Sie die Optionen --inplace und --whole-file. Ich verwende diese für meine 2-GB-VM-Images und es hat sehr geholfen (hauptsächlich, weil das rsync-Protokoll nicht viel bewirkt hat mit der Weitergabe inkrementeller Daten mit diesen Dateien). Ich empfehle diese Optionen jedoch in den meisten Fällen nicht.
Verwenden Sie --stats, um zu sehen, wie gut Ihre Dateien mithilfe des inkrementellen Protokolls rsync übertragen werden.
quelle
Eine andere Strategie besteht darin, ssh und rsync schneller zu machen. Wenn Sie über ein vertrauenswürdiges Netzwerk (sprich: privat) gehen, ist eine Verschlüsselung der tatsächlichen Nutzdaten nicht erforderlich. Sie können HPN ssh verwenden . Diese Version von ssh verschlüsselt nur die Authentifizierung. Außerdem beginnt rsync Version 3 beim Übertragen der Dateiliste mit der Übertragung von Dateien. Dies ist natürlich eine enorme Zeitersparnis gegenüber rsync Version 2. Ich weiß nicht, ob Sie danach gesucht haben, aber ich hoffe, es hilft. Außerdem unterstützt rsync Multicasting in gewisser Weise, obwohl ich nicht vorgeben werde, zu verstehen, wie.
quelle
Wenn Sie als Sicherungsmethode eine Synchronisierung durchführen, besteht das größte Problem darin, dass Sie viele Dateien sichern, die Sie sichern. Rsync kann große Dateien problemlos verarbeiten. Wenn jedoch die Anzahl der zu sichernden Dateien zu groß wird, werden Sie feststellen, dass rsync nicht in angemessener Zeit abgeschlossen wird. In diesem Fall müssen Sie das Backup in kleinere Teile zerlegen und dann diese Teile durchlaufen, z
oder Teern der Dateigruppe, um die Anzahl der Dateien zu verringern.
Wenn Dutzende von Computern einen Spiegel dieser Änderungen erhalten, hängt dies davon ab, wie aktuell das Backup sein muss. Ein Ansatz wäre, die Änderungen vom Primärserver auf den Sicherungsserver zu spiegeln und dann die anderen Server ihre Änderungen entweder durch einen rsync-Dämon auf dem anfänglichen Sicherungsserver vom Sicherungsserver abrufen zu lassen und dann die anderen Server so zu planen, dass sie geringfügig abgerufen werden Zu anderen Zeiten oder indem Sie ein Skript verwenden, verwenden Sie passwortloses ssh, um eine Verbindung zu jedem der Server herzustellen, und weisen Sie sie an, eine neue Kopie des Backups abzurufen, um zu verhindern, dass Ihr anfänglicher Backup-Server überlastet wird. Ob Sie jedoch zu so vielen Problemen wechseln, hängt davon ab Auf wie vielen anderen Computern haben Sie eine Kopie der Sicherung abgerufen?
quelle
find /Backup/ -name '*.bak' -print0 | xargs -0 -n 1 rsync -e ssh
?rsync bietet die Möglichkeit, getrennte Kopien zu erstellen . Mit anderen Worten, kann rsync (konzeptuell) diff einen Verzeichnisbaum und erzeugen eine Patch - Datei , die Sie dann später können anwenden auf eine beliebige Anzahl von Dateien , die auf die ursprüngliche Quelle identisch sind.
Es erfordert, dass Sie rsync mit dem Master aufrufen und mit spiegeln
--write-batch
; es erzeugt eine Datei. Anschließend übertragen Sie diese Datei auf eine beliebige Anzahl anderer Ziele und wenden den Stapel dann mit jedem dieser Ziele an--read-batch
.Wenn Sie eine lokale Kopie des letzten synchronisierten Status (dh eine Kopie des aktuellen Aussehens der Spiegel) auf demselben Computer wie der Master aufbewahren, können Sie diesen "Patch" auf dem Master generieren, ohne einen Spiegel zu kontaktieren:
Auf dem Meister:
Fügen Sie beliebige andere Optionen hinzu. Dies wird zwei Dinge tun:
/current/mirror
ändern, um zu reflektieren/master/data
my-batch.rsync
zur späteren Verwendung aufgerufen wird .Übertragen Sie die
my-batch.rsync
Datei vom Master auf alle Ihre Spiegel und wenden Sie dann auf den Spiegeln sozusagen den Patch an:Vorteile dieses Ansatzes:
--read-batch
nur auf dem Spiegel selbst CPU- / Io-intensiv ist)quelle