Vor-Snapshot-Skript-Hook für Windows-Gast auf Proxmox?

Vor-Snapshot-Skript-Hook für Windows-Gast auf Proxmox?

Ich habe einen Proxmox-Server mit einem Windows 10-Gast eingerichtet, auf dem MSSQL Express ausgeführt wird. Auf dem Windows-Gast ist der QEMU-Gastagent installiert und funktioniert. Für Backups habe ich einen separaten Server, auf dem Proxmox Backup ausgeführt wird und der bereits so eingestellt ist, dass einmal pro Woche vollständige Backups des Gasts erstellt werden (Stoppmodus). Darüber hinaus muss ich häufiger Snapshot-Backups mit wenig bis gar keiner Zugriffsunterbrechung durchführen. Das einfache „Einfrieren“ des Dateisystems mit einer aktiven Datenbank ist jedoch aufgrund der Möglichkeit von Dateninkonsistenzen problematisch.

Wenn es sich um MySQL auf einem Linux-Gast handelt, gibt es bereits eine Lösung in Form des Hinzufügens eines Skripts zu fsfreeze-hook, bis zu dem Punkt, dass es eineBeispielim Repo enthalten. Aber diese gesamte Funktion scheint in der Windows-Version des QEMU-Gastagenten zu fehlen, zumindest nach den wenigen spezifischen Informationen, die ich finden konnte.

Wie kann ich ein ähnliches Gast-Hook-Skript unter Windows erstellen? Idealerweise wird das Skript direkt vor Beginn des Snapshots aufgerufen, um die Datenbank in einen sicheren Zustand zu versetzen, damit ein Snapshot erstellt werden kann.

Antwort1

Sie sollten in der Lage sein, einen Snapshot auf einem Windows-Computer mit zu skripten vssadmin create shadow. Beachten Sie jedoch Folgendes:

  • vss-Snapshots unter Windows 10 gelten als unbrauchbar, da die Snapshot-Daten beschädigt sind (ich habe das Problem selbst erlebt, als ich versuchte, einige Snapshot-Dateien über wiederherzustellen ShadowExplorer).

  • jede moderne Datenbank-Engine (lies: fast alles außer MyISAM) verwendet Journaling und/oder WAL, um einen Stromausfall oder ein absturzkonsistentes Backup problemlos zu überstehen.

Zusätzlich zur Erstellung von Backups der gesamten VM empfehle ich, wenn möglich regelmäßige, skriptbasierte Datenbankdumps an anderen Orten (z. B. einer Netzwerkfreigabe) durchzuführen.

Antwort2

Ich verstehe die Anforderungen hier, aber leider ist es für „alternative“ Virtualisierungsplattformen nicht einfach, mit Microsofts Tricksereien umzugehen. Wenn Sie glauben, dass selbst Citrix Ruhe-Snapshots in XenServer aufgegeben hat, verstehen Sie die Herausforderung hier.

Ich schätze, Sie könnten versuchen, „vssadmin create shadow“ über SSH oder Powershell aufzurufen, aber das habe ich eigentlich nie versucht.

Die einzigen Möglichkeiten, die ich kenne,zuverlässigVerwalten Sie Backups einer Windows-VM auf Unternehmensebene mit etwas wie Proxmox:

  1. Da wir speziell von einer SQL Server-Maschine sprechen, halten Sie die Daten getrennt, da Sie mit den eigenen Funktionen von SQL Server sichern. Das Betriebssystem können Sie beliebig verwenden oder einfach eine Ersatz-/Klon-SQL Server-Installation behalten (keine Lizenzverletzung, wenn sie gestoppt wird). Sie verwenden jedoch SQL Server Express, was problematisch ist, da Sie keine geplanten Aufgaben haben können, sodass Sie etwas anderes finden müssen.
  2. Verwenden Sie Windows (Server) Backup innerhalb der VM, möglicherweise gekoppelt mit einem freigegebenen ZFS-Ordner, von dem Sie nach der Sicherung einen Snapshot erstellen, sodass Sie den Verlauf, den Sie behalten möchten, tatsächlich von der Speicherverwaltungsseite aus steuern können. Dies ist kostenlos und funktioniert eigentlich ziemlich gut. Die Wiederherstellung ist nicht die schnellste, da Sie das Windows-Installations-ISO booten und eine gefälschte „Bare-Metal“-Wiederherstellung innerhalb der VM durchführen müssen. Sie müssen den SQL Server VSS Writer starten, und das sollte Ihnen auch konsistente Backups von SQL Server liefern.in der Theorie. Ich mache das regelmäßig in Entwicklungs- und Testumgebungen, aber die Produktion ist eine andere Sache, und die Dokumentation ist nicht die verständlichste (danke Microsoft, wie immer gute Arbeit).
  3. Verwenden Sie andere zertifizierte Sicherungslösungen, die bessere Ergebnisse liefern als Windows Backup, aber wiederum innerhalb der VM. Es ist immer noch teuer, wenn Sie Lizenzen für viele VMs kaufen müssen. An diesem Punkt würde ich also überlegen, zu den Großen zu greifen.

Ich weiß, dass Sie nach Proxmox fragen, aber ich muss sagen, dass professionell betrachtet die beste Möglichkeit, Windows-Rechner mit wichtigen Daten zu verwalten, die Verwendung von VMWare vSphere oder Hyper-V mit Veeam Backup ist. Das ist die teuerste Lösung, aber auch die coolste für die Notfallwiederherstellung: Sie können den Rechner beispielsweise aus Backups heraus ausführen und andere coole Funktionen nutzen. Ich mache hier keine Werbung. Ich habe so ziemlich jede sinnvolle Virtualisierungsplattform ausprobiert, und wenn Sie sich für Windows entscheiden, ist das so.

Antwort3

Nun zumunzuverlässige WegeUm SQL Server-Backups speziell unter Proxmox durchzuführen, ändere ich meine vorherige Antwort, um genau Ihrer Frage zu entsprechen. Ich möchte nur betonen, dass dies überhaupt keine bewährte Vorgehensweise ist, aber ich habe gesehen, dass dies sogar mit VMWare gemacht wird (das ist dumm).

Sie können Folgendes tun:

  • Installieren Sie den OpenSSH-Server in Windows, den Windows jetzt hat

  • Richten Sie Hooks in Proxmox Backup ein (Sie müssen Backups jedoch über die Befehlszeile und nicht über die Web-GUI ausführen), wie hier beschrieben:https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hook_scripts;Auf diese Weise kann ich ein Skript ausführen, das etwas innerhalb der Windows-VM über SSH ausführt

  • das Skript, das ich ausführen werde, ist nicht VSSADMIN, sondern so etwas wie:

    SqlCmd -E -S LOCALHOST -Q "BACKUP DATABASE <DATABASENAME> TO DISK ='<PATH>'" oder es kann auch etwas komplizierteres sein, wie inkrementelle Backups und so. Sie können auch die Skripte von diesem Typen installieren, um Backups besser zu handhaben, wenn Sie SQL-Skripte mögen:https://ola.hallengren.com/sql-server-backup.html.

  • An dieser Stelle sichern Sie das Backup mit Proxmox. Die Konsistenz ist garantiert, wenn Sie warten, bis die Puffer geleert sind (das ist ein Grund, warum es aus professioneller Sicht nicht als zuverlässig angesehen werden kann).

Die Gründe, warum mir dies und der vorherige Vorschlag, VSS-Snapshots zu erstellen, nicht gefallen, sind jedoch:

  • Es scheint übermäßig kompliziert und Sie tun immer noch etwas, das unzuverlässig ist
  • Wenn ich mich tatsächlich auf den SQL Server VSS Writer-Dienst verlassen muss (das ist zwingend erforderlich, da sonst keinerlei Konsistenz entsteht), würde ich zu meinem vorherigen Vorschlag zurückkehren und Windows Backup + Speicher-Snapshots verwenden, was insgesamt besser zu verwalten ist, als einfach VSS mit einem Skript aufzurufen und das Backup zu sichern.

Bei meinen DB-Maschinen unter Proxmox, XCP-ng oder was auch immer habe ich mir nie die Mühe gemacht, sie als Maschinen zu sichern; man muss nur sicherstellen, dass sie nur den DB-Server enthalten, wie es im Allgemeinen der Fall sein sollte, wenn es sich um eine kritische Anwendung handelt. Ich denke, das Sichern dieser Maschinen ist Zeitverschwendung. Ich sichere immer auf einem externen Speicher (mit Skripten, geplanten Aufgaben, mysqldump, SQL Server Agent, sqlcmd), weil ich mit einem Docker-Container/einer VM, die ich im Voraus vorbereiten kann, in wenigen Minuten wieder einsatzbereit bin, wenn ich wirklich eine Notfallwiederherstellung durchführen muss. Es belegt auchviel weniger Platz.

verwandte Informationen