Anwendungskonsistente Snapshots von nichtflüchtigen Speichern unter Linux erstellen

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:

  1. Um die Gastumgebung für die Anwendungskonsistenz vorzubereiten, erstellen Sie benutzerdefinierte Shell-Skripts, die vor und nach der Erfassung des Snapshots ausgeführt werden.
  2. Snapshot-Einstellungen auf der VM-Instanz konfigurieren.
  3. Erstellen Sie einen Snapshot mit aktivierter Option guest-flush. Mit der Option guest-flush werden die Pre- und Post-Snapshots gestartet.

Hinweis

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.

  1. Öffnen oder erstellen Sie die Konfigurationsdatei für die Gastumgebung:

    /etc/default/instance_configs.cfg
    
  2. 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 oder false 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.
  3. 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

  1. Rufen Sie die Seite "Neuen Snapshot erstellen" auf.
  2. Geben Sie einen Namen für den Snapshot ein.
  3. Optional können Sie eine Beschreibung des Snapshots eingeben.
  4. Wählen Sie unter Quelllaufwerk ein vorhandenes Laufwerk aus, von dem Sie einen Snapshot erstellen möchten.
  5. Wählen Sie einen Speicherort aus.
  6. Klicken Sie auf die Option Anwendungskonsistenten Snapshot aktivieren.
  7. 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:

    1. Rufen Sie in der Console die Seite Logging der Operations-Suite von Google Cloud > Logs auf:
      Zur Seite Logs Explorer
    2. Rufen Sie im linken Navigationsbereich den Log Explorer auf.
    3. 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.

    In erweiterten Filter umwandeln

    Ersetzen Sie das Filtertextfeld durch den folgenden Text:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • 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.

Nächste Schritte