Snapshots von konsistenten Laufwerken für Linux-Anwendungen erstellen


Sie können anwendungskonsistente Snapshots von Laufwerken erstellen, die an Linux-VM-Instanzen (virtuelle Maschine) angehängt sind. Im Allgemeinen hängt die Qualität eines Snapshots des Laufwerks 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 das Laufwerk 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 Laufwerke:

  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.

Hinweise

  • Linux-VM erstellen
  • Gastumgebung aktualisieren.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.

    Wählen Sie den Tab für die Verwendung der Beispiele auf dieser Seite aus:

    Console

    Wenn Sie über die Google Cloud Console auf Google Cloud-Dienste und -APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.

    gcloud

    1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init
    2. Legen Sie eine Standardregion und -zone fest.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

      gcloud init

Erforderliche Rollen und Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zu gewähren, um die Berechtigungen zu erhalten, die Sie zum Verwalten von Standard-Snapshots benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Verwalten von Standard-Snapshots erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um Standard-Snapshots zu verwalten:

  • So erstellen Sie einen Snapshot eines zonalen Laufwerks:
    • compute.snapshots.create für das Projekt
    • compute.disks.createSnapshot für das Laufwerk
  • So erstellen Sie einen Snapshot eines regionalen Laufwerks mit den Daten auf dem Laufwerk:
    • compute.snapshots.create für das Projekt
    • compute.instances.useReadOnly für die Quell-VM
    • compute.disks.createSnapshot für das Laufwerk
  • So erstellen Sie einen Snapshot eines regionalen Laufwerks aus einem Prüfpunkt für die Replikatwiederherstellung:
    • compute.snapshots.create für das Projekt
    • compute.disks.createSnapshot für das Laufwerk
  • Zum Erstellen eines Snapshot-Zeitplans: compute.resourcePolicies.create für das Projekt oder die Organisation
  • Snapshot-Zeitplan mit Laufwerk verknüpfen:
    • compute.disks.addResourcePolicies für das Laufwerk
    • compute.resourcePolicies.use für die Ressourcenrichtlinie
  • So löschen Sie einen Snapshot:
    • compute.snapshots.delete für den Snapshot
    • compute.snapshots.list für das Projekt

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Beschränkungen

Für das Erstellen von anwendungskonsistenten Snapshots unter Linux gelten die folgenden Einschrä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 der Snapshot nicht erstellt, wenn das Skript einen Fehler zurückgibt oder das Zeitlimit erreicht.

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 das Laufwerk 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 Script vor dem Snapshot. Achten Sie auf die vorangestellten #!-Zeichen.

#!/bin/bash
sudo fsfreeze -f [example-disk-location]

Das folgende Codebeispiel zeigt ein Script nach dem Snapshot. Achten Sie auf die vorangestellten #!-Zeichen.

#!/bin/bash
sudo 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 Sie Snapshots erstellen. 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, für welches Laufwerk der Snapshot 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 über SCSI angehängtes 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:

    edit /etc/default/instance_configs.cfg
    
  2. Fügen Sie der Konfigurationsdatei den folgenden Abschnitt hinzu, speichern Sie Ihre Änderungen und beenden Sie den Editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Ersetzen Sie Folgendes:

    • ENABLED: Legen Sie true fest, um das Feature für anwendungskonsistente Snapshots zu aktivieren. Der Standardwert ist false.
    • TIMEOUT_SECONDS: Die Anzahl der Sekunden, die das Skript vor oder nach dem Snapshot laufen kann, bevor eine Zeitüberschreitung auftritt. Der Ganzzahlwert muss zwischen 0 und 300 liegen. Der Standardwert ist 60.

  3. Starten Sie den Gast-Agent neu, um die neuen Konfigurationseinstellungen zu verwenden.

    $ sudo systemctl restart google-guest-agent.service
    

Snapshot mit aktivierter Option guest-flush erstellen

Mit der Google Cloud Console, der Google Cloud CLI oder REST erstellen Sie einen Snapshot mit aktivierter guest-flush-Option. Dadurch werden die Pre- und Post-Skripts vor und nach der Erfassung des Snapshots ausgeführt.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Snapshot erstellen auf.

    Zur Seite "Snapshot erstellen"
  2. Geben Sie einen Namen für den Snapshot ein.
  3. Wählen Sie einen Snapshot-Typ aus. Die Standardeinstellung ist ein STANDARD-Snapshot, der die beste Option für eine langfristige Sicherung und Notfallwiederherstellung ist.

    Wählen Sie Archiv-Snapshot aus, um eine kostengünstigere Datenaufbewahrung zu ermöglichen.

  4. Optional: Geben Sie eine Beschreibung des Snapshots ein.
  5. Wählen Sie unter Quelllaufwerk das vorhandene Laufwerk aus, von dem Sie einen Snapshot erstellen möchten.
  6. Wählen Sie im Bereich Standort den Snapshot-Speicherort aus.

    Der vordefinierte oder benutzerdefinierte Standardspeicherort, der in Ihren Snapshot-Einstellungen definiert ist, wird automatisch ausgewählt. Optional können Sie die Snapshot-Einstellungen überschreiben und die Snapshots an einem benutzerdefinierten Standort speichern. Gehen Sie dazu so vor:

    1. Wählen Sie die Art des gewünschten Speicherorts für den Snapshot aus.

      • Wählen Sie Multiregional aus, um eine höhere Verfügbarkeit zu höheren Kosten zu erreichen.
      • Wählen Sie Regionale Snapshots aus, um den physischen Standort Ihrer Daten zu geringeren Kosten besser steuern zu können.
    2. Wählen Sie im Feld Standort auswählen die Region oder Multiregion aus, die Sie verwenden möchten. Wählen Sie Je nach Standort des Laufwerks aus, um die Region bzw. Multiregion mit der geringsten Entfernung zu Ihrem Quelllaufwerk zu verwenden.
  7. Klicken Sie auf die Option Anwendungskonsistenten Snapshot aktivieren.
  8. Klicken Sie auf Erstellen, um den Snapshot zu erstellen.

gcloud

Sie können den Snapshot in der Richtlinie für den Speicherort erstellen, die in Ihren Snapshot-Einstellungen festgelegt ist, oder indem Sie einen alternativen Speicherort Ihrer Wahl verwenden. Weitere Informationen finden Sie unter Snapshot-Speicherort für Snapshots auswählen.

  • Verwenden Sie den Befehl gcloud compute snapshots create, um einen Snapshot am vordefinierten oder benutzerdefinierten Standardspeicherort zu erstellen, der in Ihren Snapshot-Einstellungen konfiguriert ist.

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --guest-flush
    
  • Alternativ können Sie die Snapshot-Einstellungen überschreiben und einen Snapshot an einem benutzerdefinierten Speicherort erstellen. Geben Sie dazu das Flag --storage-location an, um festzulegen, wo der Snapshot gespeichert werden soll:

    gcloud compute snapshots create SNAPSHOT_NAME \
        --source-disk-zone=SOURCE_ZONE \
        --source-disk=SOURCE_DISK_NAME \
        --snapshot-type=SNAPSHOT_TYPE \
        --storage-location=STORAGE_LOCATION \
        --guest-flush
    

    Ersetzen Sie Folgendes:

    • SNAPSHOT_NAME: Ein Name für den Snapshot.
    • SOURCE_ZONE: Die Zone des Quelllaufwerks.
    • SOURCE_DISK_NAME: Der Name des Laufwerk-Volumes, von dem Sie einen Snapshot erstellen möchten.
    • SNAPSHOT_TYPE: Der Snapshot-Typ, entweder STANDARD oder ARCHIVE. Wenn kein Snapshot-Typ angegeben ist, wird ein STANDARD-Snapshot erstellt.
    • STORAGE_LOCATION: Optional: Der multiregionale Cloud Storage-Speicherort oder die Cloud Storage-Region, in der Sie den Snapshot speichern möchten. Sie können nur einen Speicherort angeben.

      Verwenden Sie den Parameter --storage-location nur, wenn Sie den vordefinierten oder benutzerdefinierten Standardspeicherort überschreiben möchten, der in Ihren Snapshot-Einstellungen konfiguriert ist.

REST

Sie können den Snapshot in der Richtlinie für den Speicherort erstellen, die in Ihren Snapshot-Einstellungen festgelegt ist, oder indem Sie einen alternativen Speicherort Ihrer Wahl verwenden. Weitere Informationen finden Sie unter Snapshot-Speicherort für Snapshots auswählen.

  • Zum Erstellen eines Snapshots am vordefinierten oder benutzerdefinierten Standardspeicherort, der in Ihren Snapshot-Einstellungen konfiguriert ist, senden Sie eine POST-Anfrage an die Methode snapshots.insert:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "guestFlush": true,
    }
    
  • Wenn Sie alternativ die Snapshot-Einstellungen überschreiben und einen Snapshot an einem benutzerdefinierten Speicherort erstellen möchten, senden Sie eine POST-Anfrage an die snapshots.insertMethode und fügen Sie das Attribut storageLocations in Ihre Anfrage ein:

    POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots
    {
      "name": "SNAPSHOT_NAME",
      "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME",
      "snapshotType": "SNAPSHOT_TYPE",
      "storageLocations": [
          "STORAGE_LOCATION"
      ],
      "guestFlush": true,
    }
    

Ersetzen Sie Folgendes:

  • DESTINATION_PROJECT_ID: Die ID des Projekts, in dem Sie den Snapshot erstellen möchten.
  • SNAPSHOT_NAME: Ein Name für den Snapshot.
  • SOURCE_PROJECT_ID: Die ID des Projekts des Quelllaufwerks.
  • SOURCE_ZONE: Die Zone des Quelllaufwerks.
  • SOURCE_DISK_NAME: Der Name des Laufwerk-Volumes, von dem Sie einen Snapshot erstellen möchten.
  • SNAPSHOT_TYPE: Der Snapshot-Typ, entweder STANDARD oder ARCHIVE. Wenn kein Snapshot-Typ angegeben ist, wird ein STANDARD-Snapshot erstellt.
  • STORAGE_LOCATION: Optional: Der multiregionale Cloud Storage-Speicherort oder die Cloud Storage-Region, in der Sie den Snapshot speichern möchten. Sie können nur einen Speicherort angeben.

    Verwenden Sie den Parameter storageLocations nur, wenn Sie den vordefinierten oder benutzerdefinierten Standardspeicherort überschreiben möchten, der in Ihren Snapshot-Einstellungen konfiguriert ist.

Snapshot-Zeitplan mit aktivierter Option guest-flush erstellen

Verwenden Sie geplante Snapshots, um den zonalen und regionalen Persistent Disk und die Google Cloud Hyperdisk 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 der Konfigurationsdatei für die Gastumgebung 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 Snapshot-Zeitpläne für Laufwerke erstellen.

Fehlerbehebung

Führen Sie die folgenden Schritte aus, um Fehler beim Erstellen von Snapshots zu beheben.

  • Prüfen Sie die Logs der Ereignisse zur Snapshoterstellung:

    1. Öffnen Sie in der Google Cloud Console die Seite Google Cloud Observability Logging> Logs:
      Zum Log-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 Filterfeld durch den folgenden Text:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot"
    
  • Wenn kein Script 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 Laufwerk 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 Laufwerks finden Sie unter VM erstellen.

Nächste Schritte