Sie können anwendungskonsistente Snapshots von nichtflüchtigen Speichern erstellen, die an Linux-VM-Instanzen (virtuelle Maschine) angehängt sind. Im Allgemeinen hängt die Qualität eines Snapshots des nichtflüchtigen Speichers davon ab, wie gut Ihre Anwendungen aus Snapshots wiederhergestellt werden können, die Sie während hoher Schreibarbeitslasten erstellt haben. Anwendungskonsistente Snapshots erfassen den Status von Anwendungsdaten zum Zeitpunkt der Sicherung, wenn alle Anwendungstransaktionen abgeschlossen sind und alle ausstehenden Schreibvorgänge auf das Laufwerk geleert wurden.
Zum Erstellen von anwendungskonsistenten Snapshots pausieren Sie Anwendungen oder Betriebssystemprozesse, die Daten auf den nichtflüchtigen Speicher schreiben, leeren die Zwischenspeicher des Laufwerks und synchronisieren das Dateisystem, bevor Sie den Snapshot erstellen. Je nach Anwendung sind möglicherweise diese und andere Schritte erforderlich, um sicherzustellen, dass alle Anwendungstransaktionen abgeschlossen sind und in der Sicherung erfasst werden.
So erstellen Sie einen anwendungskonsistenten Snapshot Ihrer nichtflüchtigen Speicher:
- Um die Gastumgebung für die Anwendungskonsistenz vorzubereiten, erstellen Sie benutzerdefinierte Shell-Skripts, die vor und nach der Erfassung des Snapshots ausgeführt werden.
- Snapshot-Einstellungen auf der VM-Instanz konfigurieren.
- Erstellen Sie einen Snapshot mit aktivierter Option
guest-flush
. Mit der Optionguest-flush
werden die Pre- und Post-Snapshots gestartet.
Hinweis
- Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, gehen Sie so vor:
- Installieren Sie die Google Cloud CLI oder aktualisieren Sie sie auf die neueste Version.
- Legen Sie eine Standardregion und -zone fest.
- Linux-VM erstellen
- Gastumgebung aktualisieren.
Beschränkungen
- Die Anwendungskonsistenz wird nur durch das Verhalten des benutzerdefinierten Pre- und Post-Snapshots garantiert, nicht durch den Snapshot-Vorgang selbst.
- Wenn Sie die Option
guest-flush
in Ihrer Anfrage zur Snapshot-Erstellung verwenden, wird bei einem Skriptfehler oder einer Zeitüberschreitung kein Snapshot erstellt.
Skripts vor und nach dem Snapshot erstellen
Bevor Sie fortfahren, aktualisieren Sie die Gastumgebung so, dass auf Ihrer Linux-VM die neueste Software ausgeführt wird.
Erstellen Sie zur Vereinfachung der Anwendungskonsistenz Pre- und Post-Shell-Skripts, die vor und nach der Erfassung des Snapshots ausgeführt werden. Verwenden Sie die Pre- und Post-Skripts für Vorgänge wie diese:
- Anwendungen oder Prozesse des Betriebssystems pausieren, die auf der VM ausgeführt werden und Daten auf den nichtflüchtigen Speicher schreiben.
- Zwischenspeicher des Laufwerks leeren. MySQL bietet hierfür zum Beispiel die Anweisung
FLUSH
. Verwenden Sie das für Ihre Anwendung verfügbare Tool. - Ihr Dateisystem synchronisieren.
Das folgende Codebeispiel zeigt ein einfaches Skript vor dem Snapshot. Achten Sie auf die vorangestellten #!
-Zeichen. Die Ausführung von fsfreeze -f
blockiert jeden laufenden Prozess, der auf den Dateisystem zugreift. Verwenden Sie diese Option daher mit Vorsicht, wenn Ihre Anwendung latenzempfindlich ist.
#!/bin/bash fsfreeze -f [example-disk-location]
Das folgende Codebeispiel zeigt ein einfaches Skript für einen Post-Snapshot. Achten Sie auf die vorangestellten #!
-Zeichen.
#!/bin/bash fsfreeze -u [example-disk-location]
Sie müssen die Skripts auf Ihrer VM im Verzeichnis /etc/google/snapshots/
speichern. Der vollständige Pfad des Pre-Skripts muss /etc/google/snapshots/pre.sh
sein und der vollständige Pfad des Post-Skripts muss /etc/google/snapshots/post.sh
sein.
Auf bestimmte Laufwerke in den Skripts verweisen
Das erste Argument, das an Ihre Pre- und Post-Snapshot-Skripts übergeben wird, ist eine Liste von Laufwerken, für die Snapshots erstellt werden. Sie können dieses Argument in Ihren Skripts für verschiedene Prüfungen verwenden. Wenn für Ihre VM beispielsweise mehrere Laufwerke angehängt sind, in Ihrer Snapshot-Anfrage aber nur ein Laufwerk angegeben ist, können Sie prüfen, welches Laufwerk erstellt wird.
Das Argument wird so formatiert:
- SCSI-angehängte Laufwerke: eine durch Kommas getrennte Liste von
<target/lun>
-Paaren - NVME-angehängte Laufwerke: Eine durch Kommas getrennte Liste von
<nvme:namespace>
-Paaren.
Beispiel: Ihr Bootlaufwerk wird als 1/0
angezeigt, während ein zusätzliches an die VM angehängtes Laufwerk als 2/0
angezeigt werden kann.
Konfigurationsdatei für die Gastumgebung bearbeiten
Konfigurieren Sie die Einstellungen für anwendungskonsistente Snapshots, indem Sie eine bestimmte Konfigurationsdatei auf Ihrer VM aktualisieren.
Öffnen oder erstellen Sie die Konfigurationsdatei für die Gastumgebung:
/etc/default/instance_configs.cfg
Fügen Sie der Konfigurationsdatei den folgenden Abschnitt hinzu:
[Snapshots] enabled = enabled timeout_in_seconds = timeout
Ersetzen Sie die Werte gemäß den folgenden Beschreibungen:
Schlüssel Wert Default Beschreibung enabled
true
oderfalse
false
Gibt an, ob die Funktion für anwendungskonsistente Snapshots aktiviert ist. timeout_in_seconds
Integer [0, 300] 60 Anzahl der Sekunden, die das Skript vor oder nach dem Snapshot laufen kann, bevor ein Timeout-Fehler auftritt. Beachten Sie, dass die Anzahl der Sekunden, die der gesamte Snapshot-Vorgang dauern kann, bevor ein Timeout-Fehler auftritt, 300 Sekunden pro Laufwerk beträgt und nicht konfigurierbar ist. Speichern Sie die Konfigurationseinstellungen:
sudo systemctl restart google-guest-agent.service
Snapshot mit aktivierter Option guest-flush
erstellen
Verwenden Sie die Google Cloud Console, die Google Cloud CLI oder die Compute Engine API, um einen Snapshot mit aktivierter Option guest-flush
zu erstellen. Dadurch werden die Pre- und Post-Skripts vor und nach der Erfassung des Snapshots ausgeführt.
Console
- Rufen Sie die Seite "Neuen Snapshot erstellen" auf.
- Geben Sie einen Namen für den Snapshot ein.
- Optional können Sie eine Beschreibung des Snapshots eingeben.
- Wählen Sie unter Quelllaufwerk ein vorhandenes Laufwerk aus, von dem Sie einen Snapshot erstellen möchten.
- Wählen Sie einen Speicherort aus.
- Klicken Sie auf die Option Anwendungskonsistenten Snapshot aktivieren.
- Klicken Sie auf Erstellen.
gcloud
Führen Sie diesen Befehl aus:
gcloud compute disks snapshot DISK_NAME [DISK_NAME ...] --guest-flush
Dabei gilt:
DISK_NAME
ist der Name von einem oder mehreren nichtflüchtigen Speichern, von denen Sie Snapshots erstellen möchten.
Die Google Cloud CLI wartet, bis der Vorgang den Status READY
oder FAILED
zurückgibt oder die maximale Zeitüberschreitung erreicht und gibt die letzten bekannten Details des Snapshots zurück.
API
Senden Sie eine POST
-Anfrage an die Methode disks.createSnapshot
mit aktivierter Option guestFlush
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/createSnapshot?guestFlush=true
Dabei gilt:
PROJECT_ID
: Ihre Projekt-ID.ZONE
: Die Zone, in der sich die VM und das Laufwerk befinden.DISK_NAME
: Der Name des nichtflüchtigen Speichers, von dem Sie einen Snapshot erstellen möchten.
Snapshot-Zeitplan mit aktivierter Option guest-flush
erstellen
Verwenden Sie geplante Snapshots, um Ihre zonalen und regionalen nichtflüchtigen Speicher regelmäßig und automatisch zu sichern. Wenn Sie anwendungskonsistente Snapshots für Ihre Sicherung planen möchten, verwenden Sie die Option --guest-flush
, wenn Sie den Snapshot-Zeitplan erstellen, damit die Skripts vor und nach dem Snapshot vor und nach jedem geplanten Snapshot ausgeführt werden.
Mit dem folgenden Befehl werden beispielsweise nach dem Konfigurieren meiner Einstellungen und dem Erstellen benutzerdefinierter Skripts stündlich anwendungskonsistente Snapshots erstellt:
gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush
Weitere Informationen finden Sie unter Geplante Snapshots von nichtflüchtigen Speichern erstellen.
Fehlerbehebung
Prüfen Sie die Logs der Ereignisse zur Snapshoterstellung:
- Rufen Sie in der Console die Seite Logging der Operations-Suite von Google Cloud > Logs auf:
Zur Seite Logs Explorer - Rufen Sie im linken Navigationsbereich den Log Explorer auf.
- Wählen Sie in der Liste Filter by label or text search (Nach Label oder Textsuche filtern) die Option Convert to advanced filter (In erweiterten Filter umwandeln) aus.
Ersetzen Sie das Filtertextfeld durch den folgenden Text:
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot"
- Rufen Sie in der Console die Seite Logging der Operations-Suite von Google Cloud > Logs auf:
Wenn kein Skript gefunden wird, wird kein Snapshot erstellt. Folgen Sie den Schritten unter Snapshots vor und nach dem Erstellen erstellen.
Bei einem Skriptfehler oder einer Zeitüberschreitung wird kein Snapshot erstellt. Weitere Informationen finden Sie unter Konsistente Snapshots vorbereiten. Beachten Sie, dass Sie maximal 300 Sekunden in Ihren Einstellungen konfigurieren können. Wiederholen Sie den gesamten Prozess mit den Beispielskripts.
Ein nichtflüchtiger Speicher muss an eine VM angehängt werden, um einen Snapshot des Laufwerks mit aktivierter Option
guest-flush
zu erfassen. Informationen zum Erstellen einer Linux-VM und zum Anhängen eines nichtflüchtigen Speichers finden Sie unter VM erstellen.