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. Konfigurieren Sie Snapshot-Einstellungen auf der VM-Instanz.
  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.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

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 auf der 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

Beim 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 überschreitet.

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 die Änderungen und beenden Sie den Editor.

    [Snapshots]
    enabled = ENABLED
    timeout_in_seconds = TIMEOUT_SECONDS
    

    Ersetzen Sie Folgendes:

    • ENABLED: Setzen Sie diesen Wert auf true, um das anwendungskonsistente Snapshot-Feature zu aktivieren. Der Standardwert ist false.
    • TIMEOUT_SECONDS: Die Anzahl der Sekunden, die das Prä-und Post-Snapshot-Skript benötigen könnte, um bis zur Zeitüberschreitung abgeschlossen zu sein. 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 Ihren zonalen und regionalen Persistent Disk und 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 Konfigurierungsdatei für die Gastumgebung und nach 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 \
  --max-retention-days SNAPSHOT_RETENTION_AGE

Weitere Informationen finden Sie unter Snapshot-Zeitpläne für Laufwerke.

Fehlerbehebung

Beheben Sie Fehler beim Snapshot-Zeitplan und -Erstellungsprozess, indem Sie Logs prüfen und Konfigurationen prüfen.

Logs prüfen

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.

    Zum Log-Explorer

  2. Fügen Sie die folgende Abfrage in den Logabfragebereich ein:

    resource.type="gce_disk"
    jsonPayload.event_subtype="compute.disks.createSnapshot" OR
    protoPayload.methodName="ScheduledSnapshots"
    
  3. Führen Sie die Abfrage aus und untersuchen Sie die Logs:

    Logabfrage zum Erstellen von Snapshots

Konfigurationen prüfen

Nächste Schritte