Sicherung der Ausführung von KVM qcow2 VPS

9

Ich möchte eine robuste Methode zum Sichern von KVM VPS der qcow2-Datei während der Ausführung. Nachdem ich lange gesucht hatte, stellte ich fest, dass wir rsync für Live-Backups verwenden können. Ich habe folgenden Befehl für rsync verwendet:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Es hat richtig funktioniert. Ich befürchte jedoch, dass das Backup-qcow2-Image beschädigt werden kann, wenn ein Backup erstellt wird, während VPS aufgrund von Schreib- und Löschvorgängen geändert wird (z. B. Installation neuer Software oder Aktualisierung).

Daher erscheint es interessanter, ein Backup vom Snapshot eines Live-VPS zu erstellen.

Ich habe die folgenden Befehle zum Sichern des laufenden VPS verwendet:

1. Schnappschuss erstellen:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2.Konvertieren Sie den Schnappschuss im Rohbildformat (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

So stellen Sie VPS wieder her:

3.Konvertieren Sie das Rohbild in das qcow2-Bild:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Dann können wir VPS auf virsh create base.xmlBefehl starten .

Obwohl diese Methode auch perfekt funktioniert, bin ich mir immer noch nicht sicher, ob dies die richtige Methode ist, um ein Backup des laufenden VPS zu erstellen. Ich habe hier und hier eine schöne Dokumentation zu qemu-img-Befehlen gefunden . Sie haben jedoch nichts über das Konvertieren von Schnappschüssen von Live-VPS in Rohbilder erwähnt.

Welche Methode eignet sich besser für Live-VPS-Backups? Ist das Konvertieren von Schnappschüssen in Rohbilder sicher?

Wenn ich eine ausführliche Dokumentation darüber erhalten könnte, wie sich Snapshot- und Basisdateien unter bestimmten Bedingungen verhalten, wäre dies sehr hilfreich.

Vielleicht können wir auch das Basis-qcow2-Image in eine unformatierte Sicherungsdatei konvertieren, anstatt den Snapshot zu konvertieren. Der Befehlsablauf lautet also:
1. Snapshot erstellen
2. Basis-qcow2 in Backup-Raw-Image konvertieren
3. Snapshot-Änderungen in Basis-Image übertragen
4. Snapshot löschen

Ich habe es versucht und es hat gut funktioniert mit kleinen VPS von 5 GB. Aber gibt es eine Möglichkeit für Fehler oder VPS-Beschädigungen, wenn die VPS-Größe sehr groß ist?

Danke im Voraus...

Bosco D'mello
quelle
2
Dies ist einer der Gründe, warum ich meine virtuellen Maschinen gerne auf logischen Volumes habe. Sie haben inhärente Snapshot-Unterstützung.
Halfgaar

Antworten:

12

Das einzige, was Sie vermissen, ist, das Gastdateisystem vor dem Erstellen des Snapshots in den Ruhezustand zu versetzen, um sicherzustellen, dass er konsistent ist. Dies ist möglich, virsh domfsfreezewenn Sie libvirtd verwenden.

Die Reihenfolge der Operationen lautet beispielsweise:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Beachten Sie auch, dass dies qemu-guest-agentin der VM installiert sein und ausgeführt werden muss. Abhängig von der Auswahl der Verteilung und Installation kann dies der Fall sein oder nicht.

Das qemu-guest-agentist auch erweiterbar; Sie können Skripts hinzufügen, um bestimmte Software zu unterstützen. Zum Beispiel enthält es ein Beispielskript, um MySQL in einen konsistenten Zustand zu versetzen.

Michael Hampton
quelle
Das einzige, was diese Antwort fehlt, ist das Entfernen von Schnappschüssen nach dem Backup :)
dyasny
2
@ BoscoD'mello Sofern Sie keine sehr schlechten Festplatten haben, sollte dies weniger als ein Bruchteil einer Sekunde sein. Es lohnt sich nicht, sich Sorgen zu machen.
Michael Hampton
1
Leider hat der Schnappschuss bei mir nicht funktioniert. Beim Versuch virsh domfsfreeze $VM_NAMEwird mir die Berechtigung für mein Gastdateisystem verweigert. Meine Gastdateisysteme sind verschlüsselt, nicht sicher, ob das wichtig ist.
Ein Kodierer
2
@ Edward_178118 Es hängt davon ab, ob Ihre Arbeitslast für den Bruchteil einer Sekunde angehalten werden kann.
Michael Hampton
2
@ Edward_178118 Netzwerkbetrieb mit extrem geringer Latenz, vielleicht? Ich bin noch nie auf etwas gestoßen, das ein Problem war.
Michael Hampton
1

Es gibt einen anderen Ansatz, bei dem temporäre Snapshots während der Sicherung erstellt und anschließend wieder festgeschrieben werden.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Weitere Informationen finden Sie unter: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

Thuffir
quelle
1
Wenn Sie Ihre gesicherte Festplatte später erneut benötigen, die von einer laufenden VM stammt, wie würden Sie sie wiederherstellen? Benötigen Sie den RAM-Inhalt nicht auch zum Wiederherstellen?
Adrian Zaugg