slu hat geschrieben: 11.01.2024 11:42:47
Das ist tatsächlich noch so ein Punkt an dem ich hänge, laufen ich damit nicht Gefahr das noch was im RAM steht (Datenbank,..) das noch nicht (vollständig) geschrieben wurde?
Was passiert zum Beispiel wenn ein Client eine 10GB Datei kopiert und dann das Backup (bei 5GB) los läuft?
(ist normal nicht der Fall weil man es ja in die Nacht oder was auch immer legen kann).
Es geht darum ein konsistentes *online* Backup der Dateisysteme der virtuellen Maschine zu erstellen ohne einen Agenten verwenden zu müssen (sprich: einen backup agenten in der VM der erst mühsam das Dateisystem nach geänderten Daten scannen muss)
Bei einem Online backup muss man auf Applikationsebene sicherstellen dass eben alles Passt.
Im Gegensatz dazu gibt es ein OFFLINE backup:
1) man fährt eine VM runter, macht ein backup: 100% konsistent, vom Dateisystem hin bis zur Applikationsebene.
2) man hält eine VM in ihrer Operation an: Semi-konsistent: Wenn die VM z.B. mit "virsh save" gesichert wird, muss ebenfalls sichergestellt werden dass wärend dieser "save" und ein Freeze des Kompletten VM rams durchgeführt wird, dies zu einem Zeitpunkt geschieht wo eben entsprechende Dienste in der VM in einem Konsistenten Zustand sind.
Beide Varianten haben das Problem dass die VM zum Zeitraum der sicherung nicht aktiv genutzt werden kann! Das ist aber in Umgebungen wo ich 100% Erreichbarkeit meiner Dienste sicherstellen muss nicht Praktikabel.
Bei einem Online backup hat man die möglichkeit die entsprechenden Dienste der VM über den Qemu Agent in einen Konsistenten Zustand zu versetzen:
1) backup startet, es wird ein Checkpoint angelegt und währendessen über den qemu guest Agent ein Dateisystem freeze (und entsprechender sync um die Daten im cache auf die Disk zu schreiben) für diesen Kurzen Moment durchgeführt: Der checkpoint enhält dann zummindest ein konsistentes Dateisystem und die Sicherung kann beginnen. Das anlegen des Checkpoints dauert in der regel nur den Bruchteil einer Sekunde.
2) Wenn ich weitere dienste wie eine Datenbank habe deren Konsistenz ich sicherstellen will muss ich eben den Qemu Guest Agent über scripte so erweiterten dass er bei der Freeze Operation eben auch verhindert dass meine Datenbank in einem Inkonsistenten Zustand ist, hier muss ich dann auch die Applikationen die ich sichere beim Freeze mit berücksichtigen und diese für den kurzen Moment stillegen.
virtnbdbackup versucht genau dies: wenn beim Backup ein checkpoint angelegt wird, wird vesucht über den qemu guest agent zummindest die Dateisysteme für diesen kurzen Moment anzuhalten. Inwieweit du das Treiben willst, musst du selbst entscheiden in dem du die Qemu Guest Agent scripts entsprechend erweiterst, dass neben dem default freeze auch applikationen gestoppt und kurz danach wieder gestartet werden.
Die gleiche Problematik habe ich aber auch wenn ich über die alte Sicherungsvariante mit Blockcommit und Snapshots "sichere" (oder bei einem normalen Dateisystem backup mit rsync): wer sagt dir dass zum Zeitpunkt des Snapshots alles Konsistent war? Auch hier muss über den Qemu Guest Agent dann sichergstellt werden dass bei anlegen des Snapshots die Applikation entsprechend kosnistent ist. Nur habe ich bei der alten blockcommit variante nicht die möglichkeit incrementiell oder differentiell zu sicheren und mein SIcherungszeitfenster reicht bei grossen VM's uu nicht aus.
Die Backups mit
virtnbdbackup machen es möglich eine VM nach einem Totalverlust (Storage,...) wieder auf einer neuen Hardware (virsh define vm.xml / virsh edit vm [path,..]) mit dem
Stand Zeit X weiterlaufen zu lassen/starten, richtig?
Das ist es absolut. Die VM wird aber einen normalen boot durchführen und nicht wie mit "virsh save" ab einen gewissen Zeitpunkt weiterlaufen.
Das will man auch gegebenenfalls nicht, denn wenn was wenn die entsprechende Operation die zum Datenverlust geführt hat nach Restore dann sofort wieder anläuft?
Diese ganzen Thematiken sind nicht auf libvirt beschränkt, die Sicherungsmethode für Online backups auf diese weise (Changed Block Tracking mit agent der Konsistenz sicherstellt) ist quasi defakto Standard im Backup bereich, veeam und konsorten machen das bei Vmare oder Hyperv nicht anders.