Ich habe eine Reihe von virtuellen Xen-Maschinen, die auf einer Reihe von Linux-Servern ausgeführt werden. Diese VMs speichern ihre Festplatten-Images in Linux-LVM-Volumes mit Gerätenamen wie / dev / xenVG / SERVER001OS usw. Ich möchte regelmäßig Backups dieser Festplattenimages erstellen, damit ich die VMs bei Bedarf wiederherstellen kann (die LVM-Geräte werden bereits mit DRBD zwischen jeweils zwei physischen Computern gespiegelt, ich bin hier nur besonders paranoid).
Wie gehe ich vor? Der erste Schritt besteht offensichtlich darin, ein Snapshot des LVM-Geräts zu erstellen. Wie übertrage ich dann die Daten so effizient wie möglich auf einen Sicherungsserver? Ich könnte einfach das ganze Gerät kopieren, etwa so:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... aber das würde viel Bandbreite kosten. Gibt es ein Rsync-ähnliches Tool zum Synchronisieren des Inhalts ganzer Festplattenblöcke zwischen Remoteservern? So etwas wie:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Wenn ich die Manpage von rsync richtig verstehe, funktioniert der obige Befehl nicht wirklich (oder?), Aber er zeigt, was ich anstrebe. Ich verstehe, dass die Option --devices rsync darin besteht, Geräte selbst zu kopieren, nicht den Inhalt dieser Geräte. Das Erstellen einer lokalen Kopie des VM-Images vor dem Synchronisieren mit dem Remote-Server ist keine Option, da nicht genügend Speicherplatz vorhanden ist.
Gibt es ein praktisches Dienstprogramm, das zwischen Blockgeräten und einer Sicherungsdatei auf einem Remote-Server synchronisiert werden kann? Ich kann eine schreiben, wenn ich muss, aber eine bestehende Lösung wäre besser. Habe ich eine rsync-Option verpasst, die dies für mich erledigt?
Obwohl es Patches für Schreibgeräte und Kopiergeräte für RSync gibt, funktionieren sie nur bei kleinen Images (1 bis 2 GB). RSync wird eine Ewigkeit damit verbringen, nach passenden Blöcken für größere Bilder zu suchen, und es sind fast 40 GB oder größere Geräte / Dateien unbrauchbar.
Wir verwenden Folgendes, um einen Prüfsummenvergleich pro 1 MB durchzuführen und kopieren dann einfach den Inhalt, wenn er nicht übereinstimmt. Wir verwenden dies, um Server auf einem virtuellen Host in den USA über das öffentliche Internet auf einem Sicherungssystem in Großbritannien zu sichern. Sehr wenig CPU-Aktivität und Snapshot-Leistungseinbußen treten erst nach Stunden auf:
Schnappschuss erstellen:
Initial Seeding:
Inkrementelle nächtliche Sicherung (sendet nur geänderte Blöcke):
Schnappschuss entfernen:
quelle
read ARGV,$buf,1024
anstelle vonread STDIN,$buf,1024
@ sysadmin1138? (Ich versuche auf stackoverflow.com/q/22693823/2987828 zu antworten und verstehe ARGV hier nicht). Ich benutze jeden Tag die Variante in der Frage stackoverflow.com/q/22693823/2987828 und es funktioniert gut.Leute, die dies speziell mit LVM-Snapshots tun möchten , mögen vielleicht mein lvmsync- Tool, das die Liste der geänderten Blöcke in einem Snapshot liest und nur diese Änderungen sendet.
quelle
Werfen Sie einen Blick auf Zumastor Linux Storage Project , das ein "Snapshot" -Sicherungsprogramm mit binärem "rsync" über das Tool " ddsnap " implementiert .
Von der Manpage:
ddsnap bietet eine Block-Device-Replikation mit einer Block-Level-Snapshot-Funktion, mit der mehrere Snapshots gleichzeitig effizient gespeichert werden können. ddsnap kann eine Liste von Snapshot-Chunks erstellen, die sich zwischen zwei Snapshots unterscheiden, und diese Differenz dann über die Leitung senden. Schreiben Sie auf einem Downstream-Server die aktualisierten Daten auf ein Snapshot-Block-Gerät.
quelle
Es gibt ein Python-Skript namens blocksync, mit dem auf einfache Weise zwei Block-Geräte über ein Netzwerk via ssh synchronisiert werden können, wobei nur die Änderungen übertragen werden.
Ich habe es kürzlich gehackt, um es zu bereinigen und so zu ändern, dass derselbe schnelle Prüfsummenalgorithmus wie bei rsync ( Adler-32 ) verwendet wird.
quelle
Wenn Sie versuchen, die Menge an freiem Speicherplatz zu minimieren, die Sie mit einer Ebene über das Kabel senden würden
dd
, können Sie ihn dann nicht einfach an gzip leiten, bevor Sie ihn an ssh leiten?zB dd if = / dev / xenVG / SERVER001OS | gzip | ssh administrator @ backupserver "dd von = / mnt / largeDisk / SERVER001OS.img.gz"
quelle
Beachten Sie jedoch, dass die Leistung eines Systems mit LVM-Snapshots proportional zur Anzahl der Snapshots ist.
Zum Beispiel Mysql-Performance mit lvm-Snapshots
quelle
Zusätzlich zu der Antwort von David Herselman wird das folgende Skript mit einem lokalen Gerät synchronisiert:
Soweit ich weiß, wurden beide Skripte zuerst unter lists.samba.org veröffentlicht .
quelle
Dies ist eine alte Frage, aber niemand erwähnte zwei sehr nützliche Tools, um zwei Blockgeräte effizient zu synchronisieren:
bdsync , das einen Diff-Transfer-and-Patch-Ansatz verwendet;
blocksync (hier finden Sie meine verbesserte Version ), die einen In-Place-Rewrite-Ansatz verwendet.
Ich empfehle dringend, mit beiden Werkzeugen zu spielen und das zu wählen, das sich besser an Ihre beabsichtigte Verwendung anpasst.
quelle
Nach einigen Jahren der Suche habe ich kürzlich ein Tool zum Synchronisieren von LVM-Snapshots zwischen Servern erstellt. Es ist so konzipiert, dass nur minimale E / A-Vorgänge ausgeführt werden und die Systeme ausgeführt werden können, während die Synchronisierung stattfindet.
Es ähnelt dem Senden / Empfangen von ZFS, indem es die Unterschiede zwischen LVM-Snapshots synchronisiert und Thin Provisioning verwendet, sodass die Leistung nur minimal beeinträchtigt wird.
Ich hätte gerne Feedback, also schauen Sie doch mal rein.
quelle
An diesem Skript mussten einige Verbesserungen vorgenommen werden:
quelle