In dieser interaktiven Anleitung erfahren Sie, wie Sie mit der autohealing hochverfügbare Anwendungen in Compute Engine erstellen können.
Hochverfügbare Anwendungen sollen Clients mit minimaler Latenz bedienen und minimale Ausfallzeiten haben. Die Verfügbarkeit wird beeinträchtigt, wenn eine Anwendung abstürzt oder einfriert. Bei Clients, die eine beeinträchtigte Anwendung nutzen, können hohe Latenz oder Ausfallzeiten auftreten.
Mit der automatischen Reparatur können Sie beeinträchtigte Anwendungen automatisch neu starten. Problembehaftete Instanzen werden sofort erkannt und automatisch neu erstellt, damit Clients wieder bedient werden können. Mit der automatischen Reparatur muss eine Anwendung nach einem Fehler nicht mehr manuell wieder bereitgestellt werden.
Lernziele
- Eine Systemdiagnose und eine Richtlinie für die automatische Reparatur konfigurieren
- Einen Demo-Webdienst für eine verwaltete Instanzgruppe einrichten
- Nicht bestandene Systemdiagnosen simulieren und den Korrekturprozess der automatischen Reparatur beobachten
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:- Compute Engine
Hinweis
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Wenn Sie lieber mit der Befehlszeile arbeiten möchten, installieren Sie das Google Cloud CLI.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Anwendungsarchitektur
Die Anwendung enthält die folgenden Compute Engine-Komponenten:
- Systemdiagnose: Eine von der automatischen Reparatur verwendete HTTP-Systemdiagnoserichtlinie zum Erkennen von VM-Instanzen mit Fehlern.
- Firewallregeln: Mit Google Cloud-Firewallregeln können Sie Traffic in Richtung Ihrer Instanzen zulassen oder ablehnen.
- Verwaltete Instanzgruppe: eine Gruppe von Instanzen, die im gleichen Demo-Webdienst ausgeführt werden.
- Instanzvorlage: Eine Vorlage, die zum Erstellen der einzelnen Instanzen in der Instanzgruppe verwendet wird.
Wie die Systemdiagnose den Demo-Webdienst überprüft
Eine Systemdiagnose sendet unter Verwendung eines bestimmten Protokolls wie HTTP(S), SSL oder TCP Prüfungsanfragen an eine Instanz. Weitere Informationen finden Sie in der Dokumentation zur Funktionsweise von Systemdiagnosen sowie unter Kategorien, Protokolle und Ports der Systemdiagnose.
Bei der Systemdiagnose in dieser Anleitung handelt es sich um eine HTTP-Systemdiagnose, mit der der HTTP-Pfad /health
auf Port 80 für die Prüfung genutzt wird. Bei einer HTTP-Systemdiagnose gilt die Prüfungsanfrage nur als bestanden, wenn der Pfad eine HTTP 200 (OK)
-Antwort zurückgibt. In dieser Anleitung definiert der Demo-Webserver den Pfad /health
für die Rückgabe einer HTTP 200 (OK)
-Antwort bei einwandfreiem Zustand oder einer HTTP 500 (Internal Server Error)
-Antwort bei Problemen.
Weitere Informationen finden Sie unter Erfolgskriterien für HTTP, HTTPS und HTTP/2.
Systemdiagnose erstellen
Zum Einrichten der automatischen Korrektur müssen Sie eine benutzerdefinierte Systemdiagnose erstellen und die Netzwerk-Firewall so konfigurieren, dass Systemdiagnoseprüfungen erlaubt werden. Sie können eine regionale oder eine globale Systemdiagnose verwenden. Regionale Systemdiagnosen reduzieren regionenübergreifende Abhängigkeiten und helfen dabei, den Datenstandort zu erreichen. Globale Systemdiagnosen sind praktisch, wenn Sie dieselbe Systemdiagnose für MIGs in mehreren Regionen verwenden möchten. In dieser Anleitung erstellen Sie eine globale Systemdiagnose.
Console
Erstellen Sie eine Systemdiagnose.
Rufen Sie in der Google Cloud Console die Seite Systemdiagnosen auf.
Klicken Sie auf Systemdiagnose erstellen.
Geben Sie im Feld Name
autohealer-check
ein.Legen Sie den Bereich auf
Global
fest. Für die automatische Reparatur können Sie eine regionale oder eine globale Systemdiagnose verwenden.Wählen Sie für Protokoll die Option
HTTP
aus.Legen Sie Anfragepfad auf
/health
fest. Dies gibt an, welchen HTTP-Pfad die Systemdiagnose verwendet. In dieser Anleitung definiert der Demo-Webserver den Pfad/health
für die Rückgabe einerHTTP 200 (OK)
-Antwort bei einwandfreiem Zustand oder einerHTTP 500 (Internal Server Error)
-Antwort bei Problemen.Legen Sie die Diagnosekriterien fest:
- Legen Sie Überprüfungsintervall auf
10
fest. Dies definiert die Zeitspanne vom Start einer Prüfung bis zum Start der nächsten. - Legen Sie Zeitlimit auf
5
fest. Damit wird definiert, wie lange Google Cloud bei einer Prüfung auf eine Antwort wartet. Dieser Wert muss kleiner oder gleich dem Überprüfungsintervall sein. - Legen Sie Schwellenwert für Intaktheit auf
2
fest. Dieser Wert definiert die Anzahl der sequenziellen Prüfungen, die bestanden werden müssen, damit eine Instanz als fehlerfrei erachtet wird. - Legen Sie Fehlerschwellenwert auf
3
fest. Dieser Wert definiert die Anzahl der sequenziellen Prüfungen, die fehlschlagen müssen, damit eine Instanz als fehlerhaft erachtet wird.
- Legen Sie Überprüfungsintervall auf
Klicken Sie unten auf Erstellen.
Erstellen Sie eine Firewallregel, damit HTTP-Anfragen von Systemdiagnoseprüfungen erlaubt werden.
Rufen Sie in der Google Cloud Console die Seite Firewallregel erstellen auf.
Geben Sie für Name
default-allow-http-health-check
ein.Wählen Sie für Netzwerk die Option
default
aus.Wählen Sie für Ziele die Option
All instances in the network
aus.Wählen Sie für Quellfilter die Option
IP ranges
aus.Geben Sie für Quell-IP-Bereiche die Werte
130.211.0.0/22
und35.191.0.0/16
ein.Wählen Sie unter Protokolle und Ports die Option TCP aus und geben Sie
80
ein.Klicken Sie auf Erstellen.
gcloud
Erstellen Sie mit dem
health-checks create http
-Befehl eine globale Systemdiagnose.gcloud compute health-checks create http autohealer-check \ --global \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
definiert die Zeitspanne vom Start einer Prüfung bis zum Start der nächsten.timeout
definiert, wie lange Google Cloud bei einer Prüfung auf eine Antwort wartet. Dieser Wert muss kleiner oder gleich dem Überprüfungsintervall sein.healthy-threshold
definiert die Anzahl der sequenziellen Prüfungen, die bestanden werden müssen, damit eine Instanz als fehlerfrei erachtet wird.unhealthy-threshold
definiert die Anzahl der sequenziellen Prüfungen, die fehlschlagen müssen, damit eine Instanz als fehlerhaft erachtet wird.request-path
gibt an, welchen HTTP-Pfad die Systemdiagnose verwendet. In dieser Anleitung definiert der Demo-Webserver den Pfad/health
für die Rückgabe einerHTTP 200 (OK)
-Antwort bei einwandfreiem Zustand oder einerHTTP 500 (Internal Server Error)
-Antwort bei Problemen.
Erstellen Sie eine Firewallregel, damit HTTP-Anfragen von Systemdiagnoseprüfungen erlaubt werden.
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Grundlagen einer guten Systemdiagnose für die automatische Reparatur
Die für die automatische Reparatur verwendeten Systemdiagnosen sollten konservativ sein, damit Instanzen nicht vorzeitig gelöscht und neu erstellt werden. Wenn eine Systemdiagnose für die automatische Reparatur zu aggressiv ist, kann die automatische Reparatur ausgelastete Instanzen fälschlicherweise als fehlerhaft interpretieren und unnötigerweise neu starten, wodurch die Verfügbarkeit reduziert wird.
unhealthy-threshold
: Sollte größer als1
sein. Setzen Sie diesen Wert idealerweise auf3
oder höher. Dies schützt vor seltenen Fehlern wie einem Netzwerkpaketverlust.healthy-threshold
: Ein Wert von2
ist für die meisten Anwendungen ausreichend.timeout
: Legen Sie hierfür einen großzügigen Wert fest. Der Zeitwert sollte fünfmal so hoch sein wie die erwartete Antwortzeit oder noch höher. Das sorgt für Schutz bei unerwarteten Verzögerungen wie ausgelasteten Instanzen oder langsamen Netzwerkverbindungen.check-interval
: Dieser Wert sollte zwischen 1 Sekunde und dem Zweifachen des Zeitlimits liegen (nicht zu lang oder zu kurz). Bei einem zu langen Intervall wird eine Instanz mit Fehlern nicht rechtzeitig erkannt. Ein zu kurzes Intervall kann zu einer merklichen Auslastung der Instanzen und des Netzwerks führen, da jede Sekunde eine hohe Anzahl von Systemdiagnoseprüfungen gesendet wird.
Webdienst einrichten
In dieser Anleitung wird eine auf GitHub gespeicherte Webanwendung verwendet. Weitere Informationen zur Implementierung der Anwendung finden Sie im GitHub-Repository GoogleCloudPlatform/python-docs-samples.
Erstellen Sie eine Instanzvorlage, die den Demo-Webserver beim Start der Instanz startet, um den Demo-Webdienst einzurichten. Verwenden Sie dann diese Instanzvorlage, um eine verwaltete Instanzgruppe bereitzustellen und die automatische Reparatur zu aktivieren.
Console
Erstellen Sie eine Instanzvorlage. Fügen Sie ein Startskript hinzu, mit dem der Demo-Webserver gestartet wird.
Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.
Klicken Sie auf Instanzvorlage erstellen.
Legen Sie als Name
webserver-template
fest.Wählen Sie für Maschinenkonfiguration die Option
micro
(e2-micro) aus.Klicken Sie unter Firewall das Kästchen HTTP-Traffic zulassen an.
Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten, um erweiterte Optionen aufzurufen. Es werden mehrere Tabs angezeigt.
Suchen Sie auf dem Tab Verwaltung nach Automatisierung und geben Sie das folgende Startskript ein:
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
Klicken Sie auf Erstellen.
Stellen Sie den Webserver als verwaltete Instanzgruppe bereit.
Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.
Klicken Sie auf Instanzgruppe erstellen.
Legen Sie Name auf
webserver-group
fest.Wählen Sie bei Region die Option
europe-west1
aus.Wählen Sie bei Zone die Option
europe-west1-b
aus.Wählen Sie bei Instanzvorlage die Option
webserver-template
aus.Wählen Sie für Autoscaling die Option Kein Autoscaling aus.
Legen Sie Anzahl der Instanzen auf
3
fest.Wählen Sie bei Systemdiagnose die Option
autohealer-check
aus.Legen Sie Anfängliche Verzögerung auf
90
fest.Klicken Sie auf Erstellen.
Erstellen Sie eine Firewallregel, die HTTP-Anfragen an die Webserver zulässt.
Rufen Sie in der Google Cloud Console die Seite Firewallregel erstellen auf.
Geben Sie für Name
default-allow-http
ein.Wählen Sie für Netzwerk die Option
default
aus.Wählen Sie für Ziele die Option
Specified target tags
aus.Geben Sie für Zieltags den String
http-server
ein.Wählen Sie für Quellfilter die Option
IP ranges
aus.Geben Sie für Quell-IP-Bereiche
0.0.0.0/0
ein.Wählen Sie unter Protokolle und Ports die Option TCP aus und geben Sie
80
ein.Klicken Sie auf Erstellen.
gcloud
Erstellen Sie eine Instanzvorlage. Fügen Sie ein Startskript hinzu, mit dem der Demo-Webserver gestartet wird.
gcloud compute instance-templates create webserver-template \ --machine-type e2-micro \ --tags http-server \ --metadata startup-script=' sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon'
Erstellen Sie eine Instanzgruppe:
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template webserver-template \ --size 3 \ --health-check autohealer-check \ --initial-delay 90
Erstellen Sie eine Firewallregel, die HTTP-Anfragen an die Webserver zulässt.
gcloud compute firewall-rules create default-allow-http \ --network default \ --allow tcp:80 \ --target-tags http-server
Fehler bei Systemdiagnosen simulieren
Zum Simulieren von Fehlern bei Systemdiagnosen bietet der Demo-Webserver Möglichkeiten, einen Fehler bei der Systemdiagnose zu erzwingen.
Console
Gehen Sie zu einer Webserverinstanz.
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie in der Spalte Externe IP-Adresse auf die IP-Adresse einer
webserver-group
-Instanz. In Ihrem Webbrowser wird ein neuer Tab geöffnet. Wenn die Anfrage das Zeitlimit überschreitet oder die Webseite nicht verfügbar ist, warten Sie eine Minute, bis der Server die Einrichtung abgeschlossen hat, und versuchen Sie es noch einmal.
Der Demo-Webserver zeigt eine Seite an, die der folgenden ähnelt:
Klicken Sie auf der Demo-Webseite auf Make unhealthy (Integrität aufheben).
Dies führt dazu, dass der Webserver die Systemdiagnose nicht besteht. Insbesondere bewirkt der Webserver, dass der
/health
-Pfad einHTTP 500 (Internal Server Error)
zurückgibt. Sie können dies selbst überprüfen, indem Sie schnell auf die Schaltfläche Check health (Systemdiagnose ausführen) klicken. (Dies funktioniert nicht mehr, wenn die automatische Reparatur mit dem Neustart der Instanz begonnen hat.)Warten Sie, bis die automatische Reparatur aktiv wird.
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Warten Sie, bis sich der Status der Webserverinstanz ändert. Das grüne Häkchen neben dem Instanznamen sollte sich in ein graues Quadrat ändern, mit dem angezeigt wird, dass die automatische Reparatur mit dem Neustart der fehlerhaften Instanz begonnen hat.
Klicken Sie regelmäßig auf Aktualisieren am oberen Rand der Seite, um den neuesten Status zu sehen.
Die automatische Reparatur ist abgeschlossen, wenn das graue Quadrat wieder zu einem grünen Häkchen wird, das bedeutet, dass die Instanz wieder fehlerfrei ist.
gcloud
Überwachen Sie den Status der Instanzgruppe. (Wenn Sie fertig sind, drücken Sie zum Stoppen
Ctrl+C
.)while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Wenn Instanzen einen anderen Status als
RUNNING
haben (beispielsweiseSTAGING
), warten Sie eine Minute, bis die Einrichtung der Instanzen abgeschlossen ist, und versuchen Sie es noch einmal.Öffnen Sie eine neue Cloud Shell-Sitzung mit dem installierten Google Cloud CLI.
Rufen Sie die Adresse einer Webserverinstanz ab.
gcloud compute instances list --filter webserver-group
Kopieren Sie in der Spalte
EXTERNAL_IP
die IP-Adresse einer beliebigen Webserverinstanz und speichern Sie sie als lokale Bash-Variable.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Prüfen Sie, ob die Webservereinrichtung abgeschlossen ist. Der Server gibt eine
HTTP 200 OK
-Antwort zurück.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn/19.6.0 ...
Wenn der Fehler
Connection refused
angezeigt wird, warten Sie eine Minute, bis der Server die Einrichtung abgeschlossen hat, und versuchen Sie es noch einmal.Heben Sie die Integrität des Webservers auf.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Dies führt dazu, dass der Webserver die Systemdiagnose nicht besteht. Insbesondere bewirkt der Webserver, dass der
/health
-Pfad einHTTP 500 INTERNAL SERVER ERROR
zurückgibt. Sie können dies selbst überprüfen, indem Sie schnell eine Anfrage an/health
stellen. (Dies funktioniert nicht mehr, wenn die automatische Reparatur mit dem Neustart der Instanz begonnen hat.)curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn/19.6.0 ...
Kehren Sie zu Ihrer ersten Shell-Sitzung zurück, um die Instanzgruppe zu überwachen, und warten Sie, bis die automatische Reparatur aktiv wird.
Wenn die automatische Reparatur gestartet wurde, werden die Spalten
STATUS
undACTION
aktualisiert, um darauf hinzuweisen, dass die automatische Reparatur den Neustart der fehlerhaften Instanz eingeleitet hat.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b STOPPING RECREATING webserver-template
Die automatische Reparatur ist abgeschlossen, wenn die Instanz als
STATUS
wiederRUNNING
und alsACTION
wiederNONE
meldet, was darauf hinweist, dass die Instanz erfolgreich neu gestartet wurde.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Wenn Sie die Überwachung der Instanzgruppe beendet haben, drücken Sie zum Stoppen
Ctrl+C
.
Sie können diese Übung nach Belieben wiederholen. Hierzu einige Ideen:
Was passiert, wenn an allen Instanzen gleichzeitig Fehler auftreten? Weitere Informationen zur Funktionsweise der automatischen Reparatur bei gleichzeitigen Fehlern finden Sie unter Verhalten bei der automatischen Reparatur.
Können Sie die Systemdiagnosekonfiguration aktualisieren, um Instanzen so schnell wie möglich zu reparieren? In der Praxis sollten Sie die Parameter für die Systemdiagnose so einstellen, dass konservative Werte verwendet werden, wie in dieser Anleitung erläutert. Andernfalls riskieren Sie möglicherweise, dass Instanzen versehentlich gelöscht und neu gestartet werden, wenn kein echtes Problem vorliegt.
Die Instanzgruppe hat eine
initial delay
-Konfigurationseinstellung. Können Sie die erforderliche Mindestverzögerung für diesen Demo-Webserver bestimmen? In der Praxis sollten Sie die Verzögerung etwas länger einstellen (10–20 %), als eine Instanz braucht, um zu booten und damit zu beginnen, Anwendungsanfragen zu verarbeiten. Andernfalls riskieren Sie, dass die Instanz in einer Startschleife der automatischen Reparatur hängen bleibt.
(Optional) Verlauf der automatischen Reparatur ansehen
Mit dem folgenden gcloud
-Befehl können Sie sich einen Verlauf der Vorgänge der automatischen Reparatur ansehen:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Weitere Informationen finden Sie unter Frühere automatische Reparaturvorgänge ansehen.
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.
Wenn Sie für diese Anleitung ein eigenes Projekt erstellt haben, löschen Sie das gesamte Projekt. Wenn das Projekt über Ressourcen verfügt, die Sie behalten möchten, löschen Sie nur die in dieser Anleitung erstellten Ressourcen.
Projekt löschen
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Bestimmte Ressourcen löschen
Wenn Sie das für diese Anleitung verwendete Projekt nicht löschen können, löschen Sie die Anleitungsressourcen einzeln.
Instanzgruppe löschen
Console
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
webserver-group
instance group. - To delete the instance group, click Delete.
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Instanzvorlage löschen
Konsole
Rufen Sie in der Google Cloud Console die Seite Instanzvorlagen auf.
Klicken Sie auf das Kästchen neben der Instanzvorlage.
Klicken Sie oben auf der Seite auf
Löschen. Klicken Sie im neuen Fenster auf Löschen, um den Löschvorgang zu bestätigen.
gcloud
gcloud compute instance-templates delete webserver-template -q
Systemdiagnose löschen
Konsole
Rufen Sie in der Google Cloud Console die Seite Systemdiagnosen auf.
Klicken Sie auf das Kästchen neben der Systemdiagnose.
Klicken Sie oben auf der Seite auf
Löschen. Klicken Sie im neuen Fenster auf Löschen, um den Löschvorgang zu bestätigen.
gcloud
gcloud compute health-checks delete autohealer-check -q
Firewallregeln löschen
Konsole
Rufen Sie in der Google Cloud Console die Seite Firewallregeln auf.
Klicken Sie auf die Kästchen neben den Firewallregeln namens
default-allow-http
unddefault-allow-http-health-check
.Klicken Sie oben auf der Seite auf
Löschen. Klicken Sie im neuen Fenster auf Löschen, um den Löschvorgang zu bestätigen.
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q