Live-Migrationshinweise abrufen


Der Metadatenserver stellt Informationen zu den Planungsoptionen und -einstellungen einer VM-Instanz über die Metadatenverzeichnisliste scheduling/ und den Metadatenschlüssel maintenance-event bereit. Sie können diese Metadatenschlüssel verwenden, um mehr über die Planungsoptionen einer VM zu erfahren und um sich benachrichtigen zu lassen, wenn ein Wartungsereignis bevorsteht.

Standardmäßig sind alle VMs (außer Z3 (Vorschau)) auf Live-Migration eingestellt und der Metadatenserver erhält Benachrichtigungen für Wartungsereignisse bevor eine VM-Instanz live migriert wird. Wenn Sie jedoch eine andere Planungsoption auswählen, können sich die Wartungsereignisse und das VM-Verhalten unterscheiden. Weitere Informationen zu Wartungsereignissen und zum VM-Verhalten während Ereignissen finden Sie unter Hostwartung.

Hinweise

  • Verwenden Sie für Windows Server-VMs PowerShell 3.0 oder höher. Wir empfehlen, die kopierten Codeblöcke mit ctrl+v einzufügen.
  • 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.

    Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Weitere Informationen unter Set up authentication for a local development environment.

Live-Migrationshinweise abrufen

Sie können erfahren, wann ein Wartungsereignis auftritt, indem Sie den Metadatenschlüssel maintenance-event regelmäßig abfragen.

Der Metadatenschlüssel maintenance-event wird nur für Wartungsereignisse ausgefüllt, wenn Sie die Planungsoption der VM auf migrate festgelegt haben oder eine GPU an die VM angehängt ist.

Der Wert dieses Metadatenschlüssels ändert sich 60 Sekunden, bevor eine Wartung stattfindet, sodass Ihr Anwendungscode die Möglichkeit hat, Aufgaben einzuleiten, die vor einer Wartung durchgeführt werden sollen, zum Beispiel Datensicherungen oder Logaktualisierungen.

Zusammenfassung: Compute Engine gibt die 60-Sekunden-Warnung nur dann aus, wenn:

  • Sie die Verfügbarkeitsoptionen der VM so eingestellt haben, dass bei einem Wartungsereignis live migriert werden soll.

  • Sie den Metadatenschlüssel maintenance-event seit dem letzten Wartungsereignis mindestens einmal abgefragt haben.

    • Wenn Sie den Metadatenschlüssel maintenance-event noch nie oder seit der letzten Migration nicht mehr abgefragt haben, geht Compute Engine davon aus, dass die VM keine Warnung vor bevorstehenden Wartungsereignissen benötigt. Das Wartungsereignis wird sofort ausgeführt und überspringt die 60-Sekunden-Warnung.

    • Wenn Sie die 60-Sekunden-Warnung nicht überspringen möchten, sollten Sie darauf achten, dass Ihr Clientcode nach einer Migration mindestens einmal den Metadatenschlüssel maintenance-event abfragt. Sie müssen den Metadatenschlüssel maintenance-event direkt abfragen, damit Compute Engine erkennt, dass Sie diesen Metadatenschlüssel beobachten. Eine Abfrage übergeordneter Metadaten löst die Warnung nicht aus.

Bei VMs mit angehängten GPUs ändert sich der Wert 60 Minuten, bevor die VMs beendet werden. So haben Sie Zeit, sie herunterzufahren und auf einem anderen Host neu zu starten. VMs mit angehängten GPUs werden nicht live migriert, sondern stattdessen beendet und optional neu gestartet. Weitere Informationen finden Sie unter GPU-Hostwartungsereignisse verarbeiten.

Für eine bestimmte Gruppe von VMs sind die VM-Wartungsoptionen flexibler. Weitere Informationen finden Sie unter Hostwartungsereignis überwachen und planen.

Wartungsereignis-Metadatenschlüssel abfragen

Linux-VMs

Führen Sie den folgenden Befehl aus, um den Metadatenschlüssel maintenance-event auf Linux-VMs abzufragen:

user@myinst:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event -H "Metadata-Flavor: Google"

Die Ausgabe sieht etwa so aus:

NONE

Windows-VMs

Führen Sie den folgenden Befehl aus, um den Metadatenschlüssel maintenance-event auf Windows-VMs abzufragen:

PS C:\> 
$value = (Invoke-RestMethod `
         -Headers @{'Metadata-Flavor' = 'Google'} `
         -Uri "http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event")
$value

Die Ausgabe sieht etwa so aus:

NONE

Python

Sie können den Metadatenschlüssel maintenance-event mit dem Feature zum Warten auf Aktualisierungen verwenden, um eine Benachrichtigung über den Beginn und das Ende einer Wartung an Ihre Skripts und Anwendungen zu senden. So können Sie Aktionen automatisieren, die Sie vor oder nach der Wartung ausführen möchten.

Das folgende Beispiel für Python zeigt Ihnen, wie Sie die beiden Features zusammen implementieren können.


import time
from typing import Callable, NoReturn, Optional

import requests

METADATA_URL = "http://metadata.google.internal/computeMetadata/v1/"
METADATA_HEADERS = {"Metadata-Flavor": "Google"}

def wait_for_maintenance(callback: Callable[[Optional[str]], None]) -> NoReturn:
    """
    Start an infinite loop waiting for maintenance signal.

    Args:
        callback: Function to be called when a maintenance is scheduled.

    Returns:
        Never returns, unless there's an error.
    """
    url = METADATA_URL + "instance/maintenance-event"
    last_maintenance_event = None
    last_etag = "0"

    while True:
        r = requests.get(
            url,
            params={"last_etag": last_etag, "wait_for_change": True},
            headers=METADATA_HEADERS,
        )

        # During maintenance the service can return a 503, so these should
        # be retried.
        if r.status_code == 503:
            time.sleep(1)
            continue
        r.raise_for_status()

        last_etag = r.headers["etag"]

        if r.text == "NONE":
            maintenance_event = None
        else:
            maintenance_event = r.text

        if maintenance_event != last_maintenance_event:
            last_maintenance_event = maintenance_event
            callback(maintenance_event)

def maintenance_callback(event: Optional[str]) -> None:
    """
    Example callback function to handle the maintenance event.

    Args:
        event: details about scheduled maintenance.
    """
    if event:
        print(f"Undergoing host maintenance: {event}")
    else:
        print("Finished host maintenance")

def main():
    wait_for_maintenance(maintenance_callback)

if __name__ == "__main__":
    main()

Ausgaben prüfen

Der Start- und Standardwert des Metadatenschlüssels maintenance-event ist NONE.

  • Bei VMs mit angehängten GPUs ändert sich der Wert während eines Wartungsereignisses von NONE in TERMINATE_ON_HOST_MAINTENANCE. Dieser Wert wird 60 Minuten vor Beginn des Beendigungsereignisses aktualisiert.

  • Bei VMs ohne GPU mit der Planungsoption migrate ändert sich der Wert maintenance-event so:

    1. Zu Beginn des Migrationsereignisses ändert sich der Wert von NONE in MIGRATE_ON_HOST_MAINTENANCE. Dieser Wert wird 60 Sekunden vor Beginn des Beendigungsereignisses aktualisiert.
    2. Während des Ereignisses und während Ihre VM-Instanz live migriert wird, bleibt der Wert MIGRATE_ON_HOST_MAINTENANCE.
    3. Nach der Wartung ändert sich der Wert wieder in NONE.
  • Bei VMs für einzelne Mandanten ändert sich während eines Hostwartungsereignisses der Metadatenschlüssel maintenance-event nicht und bleibt vom Beginn bis zum Ende NONE des Ereignisses.

Nächste Schritte