Kalt wiederherstellbaren Webserver mit regionalen nichtflüchtigen Speichern bereitstellen

Last reviewed 2021-08-04 UTC

In diesem Dokument wird beschrieben, wie Sie eine kalte Failover-Topologie für einen Webserver mithilfe einer verwalteten Instanzgruppe mit regionalen nichtflüchtigen Speichern bereitstellen. eine Dieses Dokument richtet sich an Architekten und Personen, die in Betriebs- und Verwaltungsteams arbeiten.

Sie erstellen eine verwaltete Instanzgruppe, die eine einzelne VM mit einem regionalen nichtflüchtigen Speicher ausführt, in dem Daten gespeichert werden. Ein externer Application Load Balancer leitet Nutzer an die VM weiter, die in der verwalteten Instanzgruppe ausgeführt wird, wie in der folgenden Abbildung dargestellt:

Der externe Application Load Balancer leitet Nutzer an eine einzelne VM weiter, die in einer verwalteten Instanzgruppe ausgeführt wird, und ein regionaler, nichtflüchtiger Speicher ist mit der VM verbunden.

Wenn ein Instanzfehler auftritt, versucht die verwaltete Instanzgruppe, die VM in derselben Zone neu zu erstellen. Wenn der Fehler auf Zonenebene auftritt, kann Cloud Monitoring oder ein ähnliches System Sie über das Problem informieren und Sie können manuell eine andere verwaltete Instanzgruppe in einer anderen funktionierenden Zone erstellen. In beiden Fällen hängt die Plattform den regionalen nichtflüchtigen Speicher an die neue VM in der Instanzgruppe an.

In diesem Dokument verwenden Sie die externe IP-Adresse der VM oder des Load-Balancers, um eine einfache Seite auf dem Webserver aufzurufen. Mit diesem Ansatz können Sie das kalte Failover-Muster testen, wenn Sie keinen registrierten Domainnamen haben, ohne DNS-Änderungen zu verwenden. Erstellen und konfigurieren Sie in einer Produktionsumgebung eine Cloud-DNS-Zone und einen Datensatz, die zu der externen IP-Adresse aufgelöst werden, die dem Load Balancer zugewiesen ist.

In diesem Szenario wird der Kostenunterschied für die Ausführung mehrerer VMs mit einem bestimmten Datenschutzniveau abgewogen. Ihre Kosten sind höher, wenn Sie einen regionalen nichtflüchtigen Speicher ausführen, der eine kontinuierliche Replikation von Daten zwischen zwei Zonen in einer Region bietet, aber Sie minimieren das Risiko eines Datenverlusts, wenn ein Fehler auf Zonenebene auftritt. Um Ihre Speicherkosten zu senken, können Sie stattdessen einen kalten wiederherstellbaren Webserver mit Snapshots des nichtflüchtigen Speichers bereitstellen.

In der folgenden Tabelle werden einige grobe Unterschiede in den Datenschutzoptionen für kalte Wiederherstellungsansätze beschrieben, die regionale nichtflüchtige Speicher oder Snapshots nichtflüchtiger Speicher verwenden. Weitere Informationen finden Sie unter Hochverfügbarkeitsoptionen mit nichtflüchtigem Speicher.

Regionale nichtflüchtige Speicher Snapshots nichtflüchtiger Speicher
Datenverlust – Recovery Point Objective (RPO) Null bei einem einzelnen Ausfall, z. B. einem anhaltenden Ausfall in einer Zone oder einer Netzwerkverbindung. Alle Daten seit dem letzten Snapshot, was normalerweise eine Stunde oder länger ist.

Der potenzielle Datenverlust hängt von Ihrem Snapshot-Zeitplan ab, der steuert, wie häufig Snapshots erstellt werden.
Recovery Time Objective (RTO) Bereitstellungszeit für eine neue VM zuzüglich mehrerer Sekunden, bis der regionale nichtflüchtige Speicher wieder angehängt wird. Die Bereitstellungszeit einer neuen VM zuzüglich der Zeit zum Erstellen eines neuen nichtflüchtigen Speichers aus dem letzten Snapshot.

Die Erstellungszeit des Laufwerks hängt von der Größe des Snapshots ab und kann mehrere Minuten oder Stunden dauern.
Cost Die Speicherkosten werden verdoppelt, wenn der regionale nichtflüchtige Speicher kontinuierlich in eine andere Zone repliziert wird. Sie zahlen nur für den tatsächlich verbrauchten Snapshot-Speicherplatz.
Weitere Informationen finden Sie unter Preise für Laufwerke und Images.

Ziele

  • Eine verwaltete Instanzgruppe erstellen, um eine VM mit einem regionalen nichtflüchtigen Speicher auszuführen.
  • Eine Instanzvorlage und ein Startskript erstellen
  • Einen externen Application Load Balancer erstellen und konfigurieren
  • Das kalte Failover des Webservers mit einer verwalteten Instanzgruppe testen, die als Ersatz dient

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Compute Engine API aktivieren.

    Aktivieren Sie die API

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Compute Engine API aktivieren.

    Aktivieren Sie die API

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Sie können die Google Cloud CLI in der Google Cloud Console ausführen, ohne die Google Cloud CLI zu installieren. Verwenden Sie Cloud Shell, um die gcloud CLI in der Google Cloud Console auszuführen.

Umgebung vorbereiten

In diesem Abschnitt definieren Sie einige Variablen für Ihre Ressourcennamen und Standorte. Diese Variablen werden von den Google Cloud CLI-Befehlen verwendet, wenn Sie die Ressourcen bereitstellen.

Sofern nicht anders angegeben, geben Sie in dieser Anleitung alle Befehle in Cloud Shell oder in Ihrer lokalen Entwicklungsumgebung ein.

  1. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID: Geben Sie bei Bedarf ein eigenes Namenssuffix für Ressourcen an, z. B. app.

    Geben Sie eine Region wie us-central1 und zwei Zonen innerhalb dieser Region an, z. B. us-central1-a und us-central1-f. Diese Zonen definieren, wo der regionale nichtflüchtige Speicher und die erste verwaltete Instanzgruppe bereitgestellt werden und wohin Sie bei Bedarf manuell ausweichen können.

    PROJECT_ID=PROJECT_ID
    NAME_SUFFIX=app
    REGION=us-central1
    ZONE1=us-central1-a
    ZONE2=us-central1-f
    

VPC und Subnetz erstellen

Erstellen Sie eine Virtual Private Cloud (VPC) und ein Subnetz, um Netzwerkzugriff auf die VMs zu gewähren. Da die verwaltete Instanzgruppe zonenübergreifend in einer einzelnen Region funktioniert, wird nur ein Subnetz erstellt. Weitere Informationen zu den Vorteilen des benutzerdefinierten Subnetzmodus für die Verwaltung von IP-Adressbereichen in Ihrer Umgebung finden Sie unter VPC-Netzwerke im benutzerdefinierten Modus verwenden.

  1. Erstellen Sie die VPC mit einem benutzerdefinierten Subnetzmodus:

    gcloud compute networks create network-$NAME_SUFFIX \
        --subnet-mode=custom
    

    Wenn Sie eine Cloud Shell-Eingabeaufforderung sehen, autorisieren Sie diese erste Anfrage für das Durchführen von API-Aufrufen.

  2. Erstellen Sie ein Subnetz in der neuen VPC. Definieren Sie einen eigenen Adressbereich wie 10.1.0.0/20, der in Ihren Netzwerkbereich passt:

    gcloud compute networks subnets create subnet-$NAME_SUFFIX-$REGION \
        --network=network-$NAME_SUFFIX \
        --range=10.1.0.0/20 \
        --region=$REGION
    

Firewallregeln erstellen

  1. Erstellen Sie Firewallregeln, um Web-Traffic und Systemdiagnosen für den Load-Balancer und die verwalteten Instanzgruppen zuzulassen:

    gcloud compute firewall-rules create allow-http-$NAME_SUFFIX \
        --network=network-$NAME_SUFFIX \
        --direction=INGRESS \
        --priority=1000 \
        --action=ALLOW \
        --rules=tcp:80 \
        --source-ranges=0.0.0.0/0 \
        --target-tags=http-server
    
    gcloud compute firewall-rules create allow-health-check-$NAME_SUFFIX \
        --network=network-$NAME_SUFFIX \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=allow-health-check \
        --rules=tcp:80
    

    Die HTTP-Regel lässt Traffic zu jeder VM zu, auf die das Tag http-server angewendet wird, sowie aus einer beliebigen Quelle mithilfe des Bereichs 0.0.0.0/0. Für die Regel „Systemdiagnose“ sind für Google Cloud Standardbereiche festgelegt, damit die Plattform den Zustand von Ressourcen ordnungsgemäß überprüfen kann.

  2. Wenn Sie SSH-Traffic für die Erstkonfiguration eines Basis-VM-Images zulassen möchten, legen Sie für Ihre Firewallregel mithilfe des Parameters --source-range Ihre Firewallregel fest. Möglicherweise müssen Sie zusammen mit Ihrem Netzwerkteam ermitteln, welche Quellbereiche in Ihrer Organisation verwendet werden.

    Ersetzen Sie IP_ADDRESS_SCOPE durch Ihre eigenen IP-Adressbereiche:

    gcloud compute firewall-rules create allow-ssh-$NAME_SUFFIX \
        --network=network-$NAME_SUFFIX \
        --direction=INGRESS \
        --priority=1000 \
        --action=ALLOW \
        --rules=tcp:22 \
        --source-ranges=IP_ADDRESS_SCOPE
    
  3. Prüfen Sie nach dem Erstellen der Firewallregeln, ob die drei Regeln hinzugefügt wurden:

    gcloud compute firewall-rules list \
        --project=$PROJECT_ID \
        --filter="NETWORK=network-$NAME_SUFFIX"
    

    Die folgende Beispielausgabe zeigt, dass die drei Regeln korrekt erstellt wurden:

    NAME                    NETWORK      DIRECTION  PRIORITY  ALLOW
    allow-health-check-app  network-app  INGRESS    1000      tcp:80
    allow-http-app          network-app  INGRESS    1000      tcp:80
    allow-ssh-app           network-app  INGRESS    1000      tcp:22
    

Regionalen nichtflüchtigen Speicher und VM erstellen

Ein regionaler nichtflüchtiger Speicher ermöglicht die kontinuierliche Replikation von Daten zwischen zwei Zonen in einer Region. Verwaltete Instanzgruppen, die in denselben zwei Zonen wie der regionale nichtflüchtige Speicher ausgeführt werden, können das Laufwerk dann an eine VM anhängen.

  1. Erstellen Sie eine SSD mit 10 GiB Informieren Sie sich über Ihre Speicheranforderungen und die damit verbundenen Kosten für den bereitgestellten Speicherplatz, nicht für den verbrauchten Speicherplatz. Weitere Informationen finden Sie unter Preise für nichtflüchtigen Speicher.

    gcloud compute disks create disk-$NAME_SUFFIX \
        --region $REGION \
        --replica-zones $ZONE1,$ZONE2 \
        --size=10 \
        --type=pd-ssd
    
  2. Erstellen Sie eine Basis-VM mit einem angehängten regionalen nichtflüchtigen Speicher:

    gcloud compute instances create vm-base-$NAME_SUFFIX \
        --zone=$ZONE1 \
        --machine-type=n1-standard-1 \
        --subnet=subnet-$NAME_SUFFIX-$REGION \
        --tags=http-server \
        --image=debian-10-buster-v20210721 \
        --image-project=debian-cloud \
        --boot-disk-size=10GB \
        --boot-disk-type=pd-balanced \
        --boot-disk-device-name=vm-base-$NAME_SUFFIX \
        --disk=mode=rw,name=disk-$NAME_SUFFIX,device-name=disk-$NAME_SUFFIX,scope=regional
    

    Sie verwenden die zu Beginn dieses Dokuments definierten Parameter, um die VM zu benennen und eine Verbindung zum richtigen Subnetz herzustellen. Namen werden auch von den Parametern für das Bootlaufwerk und das Datenlaufwerk zugewiesen.

  3. Stellen Sie zum Installieren und Konfigurieren der einfachen Website zuerst eine SSH-Verbindung zur Basis-VM her:

    gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE1
    
  4. Erstellen Sie in Ihrer SSH-Sitzung zur VM ein Skript, um die VM in einem Editor Ihrer Wahl zu konfigurieren. Im folgenden Beispiel wird Nano als Editor verwendet:

    nano configure-vm.sh
    

    Fügen Sie das folgende Konfigurationsskript in die Datei ein. Aktualisieren Sie die Variable NAME_SUFFIX so, dass sie dem Wert zu Beginn dieses Dokuments entspricht, z. B. app.

    #!/bin/bash
    
    NAME_SUFFIX=app
    
    # Create directory for the basic website files
    sudo mkdir -p /var/www/example.com
    sudo chmod a+w /var/www/example.com
    sudo chown -R www-data: /var/www/example.com
    
    # Find the disk name, then format and mount it
    DISK_NAME="google-disk-$NAME_SUFFIX"
    DISK_PATH="$(find /dev/disk/by-id -name "${DISK_NAME}" | xargs -I '{}' readlink -f '{}')"
    
    sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_PATH
    sudo mount -o discard,defaults $DISK_PATH /var/www/example.com
    
    # Install Apache
    sudo apt-get update && sudo apt-get -y install apache2
    
    # Write out a basic HTML file to the mounted persistent disk
    sudo tee -a /var/www/example.com/index.html >/dev/null <<'EOF'
    <!doctype html>
    <html lang=en>
    <head>
    <meta charset=utf-8>
        <title>HA / DR example</title>
    </head>
    <body>
        <p>Welcome to a test web server with regional persistent disks!</p>
    </body>
    </html>
    EOF
    
    # Write out an Apache configuration file
    sudo tee -a /etc/apache2/sites-available/example.com.conf >/dev/null <<'EOF'
    <VirtualHost *:80>
            ServerName www.example.com
    
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/example.com
    
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    EOF
    
    # Enable the Apache configuration file and reload service
    sudo a2dissite 000-default
    sudo a2ensite example.com.conf
    sudo systemctl reload apache2
    
  5. Geben Sie die Datei aus und beenden Sie den Editor. In Nano verwenden Sie beispielsweise Ctrl-O, um die Datei auszugeben, und beenden dann mit Ctrl-X.

  6. Machen Sie das Konfigurationsskript ausführbar und führen Sie es dann aus:

    chmod +x configure-vm.sh
    ./configure-vm.sh
    
  7. Beenden Sie die SSH-Sitzung zur VM:

    exit
    
  8. Rufen Sie die IP-Adresse der VM ab und rufen Sie mit curl die einfache Webseite auf:

    curl $(gcloud compute instances describe vm-base-$NAME_SUFFIX \
        --zone $ZONE1 \
        --format="value(networkInterfaces.accessConfigs.[0].natIP)")
    

    Die einfache Website wird zurückgegeben, wie in der folgenden Beispielausgabe gezeigt:

    <!doctype html>
    <html lang=en>
    <head>
    <meta charset=utf-8>
        <title>HA / DR example</title>
    </head>
    <body>
        <p>Welcome to a test web server with regional persistent disks!</p>
    </body>
    </html>
    

    Mit diesem Schritt wird bestätigt, dass Apache richtig konfiguriert ist, und die Seite wird aus dem angehängten regionalen nichtflüchtigen Speicher geladen. In den nächsten Abschnitten erstellen Sie ein Image mit dieser Basis-VM und konfigurieren eine Instanzvorlage mit einem Startskript.

VM-Image und Instanzvorlage erstellen

Zum Erstellen identischer VMs, die automatisch ohne zusätzliche Konfiguration bereitgestellt werden können, verwenden Sie ein benutzerdefiniertes VM-Image. Dieses Image erfasst die Betriebssystem- und Apache-Konfiguration. Dieses Image wird von jeder VM verwendet, die in den nächsten Schritten in der verwalteten Instanzgruppe erstellt wurde.

  1. Bevor Sie ein Image erstellen können, müssen Sie die VM beenden:

    gcloud compute instances stop vm-base-$NAME_SUFFIX --zone=$ZONE1
    
  2. Erstellen Sie ein Image der im vorherigen Abschnitt konfigurierten Basis-VM:

    gcloud compute images create image-$NAME_SUFFIX \
        --source-disk=vm-base-$NAME_SUFFIX \
        --source-disk-zone=$ZONE1 \
        --storage-location=$REGION
    
  3. Erstellen Sie eine Instanzvorlage, in der die Konfiguration für jede VM definiert wird:

    gcloud compute instance-templates create template-$NAME_SUFFIX \
        --machine-type=n1-standard-1 \
        --subnet=projects/$PROJECT_ID/regions/$REGION/subnetworks/subnet-$NAME_SUFFIX-$REGION \
        --tags=http-server \
        --image=image-$NAME_SUFFIX \
        --region=$REGION \
        --metadata=^,@^startup-script=\!\#\ /bin/bash$'\n'echo\ UUID=\`blkid\ -s\ UUID\ -o\ value\ /dev/sdb\`\ /var/www/example.com\ ext4\ discard,defaults,nofail\ 0\ 2\ \|\ tee\ -a\ /etc/fstab$'\n'mount\ -a
    

    Das im vorherigen Schritt erstellte Image wird als Quelle für jede VM definiert. Außerdem wird ein Startskript definiert, das den regionalen nichtflüchtigen Speicher bereitstellt.

Verwaltete Instanzgruppe erstellen

Die VMs werden in einer verwalteten Instanzgruppe ausgeführt. Die verwaltete Instanzgruppe wird in einer definierten Zone ausgeführt und überwacht den Zustand der VMs. Wenn ein Instanzfehler auftritt und die VM nicht mehr ausgeführt wird, versucht die verwaltete Instanzgruppe, eine weitere VM in derselben Zone neu zu erstellen, und hängt den regionalen nichtflüchtigen Speicher an. Wenn der Fehler auf Zonenebene liegt, müssen Sie das kalte Failover manuell ausführen und eine weitere verwaltete Instanzgruppe in einer anderen Zone erstellen. Dieselbe benutzerdefinierte Image- und Instanzvorlage konfiguriert die VM automatisch auf die gleiche Weise.

  1. Erstellen Sie eine Systemdiagnose, um die VMs in der verwalteten Instanzgruppe zu überwachen. Diese Systemdiagnose gewährleistet, dass die VM auf Port 80 antwortet. Überwachen Sie für Ihre eigenen Anwendungen die entsprechenden Ports, um den VM-Status zu prüfen.

    gcloud compute health-checks create http http-basic-check-$NAME_SUFFIX --port 80
    
  2. Erstellen Sie zuerst eine verwaltete Instanzgruppe mit null VMs, die die im vorherigen Schritt erstellte Instanzvorlage verwendet.

    gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$ZONE1 \
        --base-instance-name=instance-vm-$NAME_SUFFIX \
        --template=template-$NAME_SUFFIX \
        --size=0 \
        --zone=$ZONE1 \
        --health-check=http-basic-check-$NAME_SUFFIX
    
  3. Erstellen Sie eine einzelne VM in der verwalteten Instanzgruppe und hängen Sie den regionalen nichtflüchtigen Speicher an. Wenn bei dieser VM ein Fehler auftritt, versucht die verwaltete Instanzgruppe, sie in derselben Zone neu zu erstellen und den nichtflüchtigen Speicher wieder hinzuzufügen.

    gcloud compute instance-groups managed create-instance instance-group-$NAME_SUFFIX-$ZONE1 \
        --instance instance-vm-$NAME_SUFFIX \
        --zone=$ZONE1\
        --stateful-disk device-name=disk-$NAME_SUFFIX,source=projects/$PROJECT_ID/regions/$REGION/disks/disk-$NAME_SUFFIX
    

Erstellen Sie für dieses Cold-Recovery-Anwendungsszenario keine Autoscaling-Regeln, um die Anzahl der VMs zu erhöhen, die in der verwalteten Instanzgruppe ausgeführt werden.

Load-Balancer erstellen und konfigurieren

Damit Nutzer auf Ihre Website zugreifen können, müssen Sie Traffic zu den VMs zulassen, die in der verwalteten Instanzgruppe ausgeführt werden. Außerdem möchten Sie den Traffic automatisch an neue VMs weiterleiten, wenn in einer verwalteten Instanzgruppe ein Zonenfehler auftritt.

Im folgenden Abschnitt erstellen Sie einen externen Load-Balancer mit einem Back-End-Dienst für HTTP-Traffic an Port 80, verwenden die in den vorherigen Schritten erstellte Systemdiagnose und ordnen eine externe IP-Adresse dem Back-End-Dienst zu.

Weitere Informationen finden Sie unter Einfachen externen HTTP-Load-Balancer einrichten.

  1. Erstellen und konfigurieren Sie den Load-Balancer für Ihre Anwendung:

    # Configure port rules for HTTP port 80
    gcloud compute instance-groups set-named-ports \
        instance-group-$NAME_SUFFIX-$ZONE1 \
        --named-ports http:80 \
        --zone $ZONE1
    
    # Create a backend service and add the managed instance group to it
    gcloud compute backend-services create \
        web-backend-service-$NAME_SUFFIX \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check-$NAME_SUFFIX \
        --global
    
    gcloud compute backend-services add-backend \
        web-backend-service-$NAME_SUFFIX \
        --instance-group=instance-group-$NAME_SUFFIX-$ZONE1 \
        --instance-group-zone=$ZONE1 \
        --global
    
    # Create a URL map for the backend service
    gcloud compute url-maps create web-map-http-$NAME_SUFFIX \
        --default-service web-backend-service-$NAME_SUFFIX
    
    # Configure forwarding for the HTTP traffic
    gcloud compute target-http-proxies create \
        http-lb-proxy-$NAME_SUFFIX \
        --url-map web-map-http-$NAME_SUFFIX
    
    gcloud compute forwarding-rules create \
        http-content-rule-$NAME_SUFFIX \
        --global \
        --target-http-proxy=http-lb-proxy-$NAME_SUFFIX \
        --ports=80
    
  2. Rufen Sie die IP-Adresse der Weiterleitungsregel für den Web-Traffic ab:

    IP_ADDRESS=$(gcloud compute forwarding-rules describe http-content-rule-$NAME_SUFFIX \
        --global \
        --format="value(IPAddress)")
    
  3. Verwenden Sie curl oder öffnen Sie Ihren Webbrowser, um die Website mithilfe der IP-Adresse des Load-Balancers aus dem vorherigen Schritt aufzurufen:

    curl $IP_ADDRESS
    

    Es dauert einige Minuten, bis der Load-Balancer die Bereitstellung abgeschlossen hat und Traffic korrekt an Ihr Back-End weitergeleitet wird. Wenn der Load-Balancer noch bereitgestellt wird, wird der HTTP-Fehler 404 oder 502 zurückgegeben. Warten Sie gegebenenfalls einige Minuten und versuchen Sie noch einmal, auf die Website zuzugreifen.

    Die einfache Website wird zurückgegeben, wie in der folgenden Beispielausgabe gezeigt:

    <!doctype html>
    
    <html lang=en>
    <head>
    <meta charset=utf-8>
        <title>HA / DR example</title>
    </head>
    <body>
        <p>Welcome to a test web server with regional persistent disks!</p>
    </body>
    </html>
    

Zonenausfall und -wiederherstellung simulieren

Sehen Sie sich die Ressourcenbereitstellungen an, bevor Sie einen Fehler auf Zonenebene simulieren. Alle Ressourcen wurden zur Unterstützung der Umgebung erstellt, wie in der folgenden Abbildung dargestellt:

Der externe Application Load Balancer leitet Nutzer an eine einzelne VM weiter, die in einer verwalteten Instanzgruppe ausgeführt wird, und ein regionaler, nichtflüchtiger Speicher ist mit der VM verbunden.

  • Eine VM mit einer verwalteten Instanzgruppe, auf der ein regionaler nichtflüchtiger Speicher angehängt ist und eine einfache Website speichert.
  • Ein Startskript wird auf eine Instanzvorlage angewendet, sodass alle in der verwalteten Instanzgruppe erstellten VMs den regionalen nichtflüchtigen Speicher bereitstellen.
  • Mit einer Systemdiagnose wird der Status der VM in der verwalteten Instanzgruppe überwacht.
  • Der externe Application Load Balancer leitet Nutzer an die VM weiter, die in der verwalteten Instanzgruppe ausgeführt wird.
  • Wenn die VM ausfällt, versucht die verwaltete Instanzgruppe, eine VM in derselben Zone neu zu erstellen. Wenn der Fehler auf Zonenebene auftritt, müssen Sie manuell eine verwaltete Ersatzinstanzgruppe in einer anderen, funktionierenden Zone erstellen.

In einer Produktionsumgebung können Sie mithilfe von Cloud Monitoring oder einer anderen Monitoring-Lösung eine Benachrichtigung erhalten, wenn ein Problem auftritt. In der Benachrichtigung wird ein Mensch aufgefordert, den Umfang des Fehlers zu verstehen, bevor Sie manuell eine verwaltete Ersatzinstanzgruppe in einer anderen, funktionierenden Zone erstellen. Alternativ können Sie Ihre Monitoring-Lösung verwenden, um Ausfälle bei der verwalteten Instanzgruppe automatisch zu beheben.

Wenn Sie oder Ihre Überwachungslösung feststellen, dass ein Failover am sinnvollsten ist, erstellen Sie eine verwaltete Ersatzinstanzgruppe. In diesem Dokument erstellen Sie diese Ersatzressource manuell.

  1. Löschen Sie das Back-End des Load-Balancers und die verwaltete Instanzgruppe, um einen Ausfall auf Zonenebene zu simulieren:

    gcloud compute backend-services remove-backend \
        web-backend-service-$NAME_SUFFIX \
        --instance-group=instance-group-$NAME_SUFFIX-$ZONE1 \
        --instance-group-zone=$ZONE1 \
        --global
    
    gcloud compute instance-groups managed delete instance-group-$NAME_SUFFIX-$ZONE1 \
          --zone=$ZONE1
    

    Bestätigen Sie bei entsprechender Aufforderung die Anfrage zum Löschen der verwalteten Instanzgruppe.

    In einer Produktionsumgebung generiert das Monitoringsystem eine Benachrichtigung, um nun eine kalte Failover-Aktion auszuführen.

  2. Verwenden Sie wieder curl oder Ihren Webbrowser, um auf die IP-Adresse des Load-Balancers zuzugreifen:

    curl $IP_ADDRESS --max-time 5
    

    Die Anfrage curl schlägt fehl, da es keine fehlerfreien Ziele für den Load-Balancer gibt.

  3. Erstellen Sie eine verwaltete Instanzgruppe in einer anderen Zone, um den kalten Failover zu simulieren:

    gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$ZONE2 \
        --base-instance-name=instance-vm-$NAME_SUFFIX \
        --template=template-$NAME_SUFFIX \
        --size=0 \
        --zone=$ZONE2 \
        --health-check=http-basic-check-$NAME_SUFFIX
    
    gcloud compute instance-groups managed create-instance instance-group-$NAME_SUFFIX-$ZONE2 \
        --instance instance-vm-$NAME_SUFFIX \
        --zone=$ZONE2 \
        --stateful-disk device-name=disk-$NAME_SUFFIX,source=projects/$PROJECT_ID/regions/$REGION/disks/disk-$NAME_SUFFIX
    

    Das VM-Image, die Instanzvorlage und der regionale nichtflüchtige Speicher verwalten die Konfiguration für die Anwendungsinstanz.

  4. Aktualisieren Sie den Load-Balancer, um die neue verwaltete Instanzgruppe und die VM hinzuzufügen:

    gcloud compute instance-groups set-named-ports \
        instance-group-$NAME_SUFFIX-$ZONE2 \
        --named-ports http:80 \
        --zone $ZONE2
    
    gcloud compute backend-services add-backend \
        web-backend-service-$NAME_SUFFIX \
        --instance-group=instance-group-$NAME_SUFFIX-$ZONE2 \
        --instance-group-zone=$ZONE2 \
        --global
    
  5. Verwenden Sie noch einmal curl oder Ihren Webbrowser, um auf die IP-Adresse des Load-Balancers zuzugreifen, die den Traffic an die VM weiterleitet, welche in der verwalteten Instanzgruppe ausgeführt wird:

    curl $IP_ADDRESS
    

    Es dauert einige Minuten, bis die VM bereitgestellt ist und den regionalen nichtflüchtigen Speicher angehängt hat. Warten Sie gegebenenfalls einige Minuten und versuchen Sie noch einmal, auf die Website zuzugreifen.

    Die folgende Beispielantwort zeigt, dass die Webseite auf der VM korrekt ausgeführt wird:

    <!doctype html>
    <html lang=en>
    <head>
    <meta charset=utf-8>
        <title>HA / DR example</title>
    </head>
    <body>
        <p>Welcome to a test web server with regional persistent disks!</p>
    </body>
    </html>
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Führen Sie die folgenden Schritte aus, um die in diesem Dokument erstellten einzelnen Ressourcen zu löschen.

  1. Löschen Sie die Konfiguration des Load-Balancers:

    gcloud compute forwarding-rules delete \
        http-content-rule-$NAME_SUFFIX --global --quiet
    
    gcloud compute target-http-proxies delete \
        http-lb-proxy-$NAME_SUFFIX --quiet
    
    gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet
    
    gcloud compute backend-services delete \
        web-backend-service-$NAME_SUFFIX --global --quiet
    
  2. Löschen Sie die verwaltete Instanzgruppe und die Systemdiagnose:

    gcloud compute instance-groups managed delete instance-group-$NAME_SUFFIX-$ZONE2 \
        --zone=$ZONE2 --quiet
    
    gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet
    
  3. Löschen Sie die Instanzvorlage, das Image, die Basis-VM und den nichtflüchtigen Speicher:

    gcloud compute instance-templates delete template-$NAME_SUFFIX --quiet
    
    gcloud compute images delete image-$NAME_SUFFIX --quiet
    
    gcloud compute instances delete vm-base-$NAME_SUFFIX --zone=$ZONE1 --quiet
    
    gcloud compute disks delete disk-$NAME_SUFFIX --region=$REGION --quiet
    
  4. Löschen Sie die Firewallregeln:

    gcloud compute firewall-rules delete allow-health-check-$NAME_SUFFIX --quiet
    
    gcloud compute firewall-rules delete allow-ssh-$NAME_SUFFIX --quiet
    
    gcloud compute firewall-rules delete allow-http-$NAME_SUFFIX --quiet
    
  5. Löschen Sie die statische externe IP-Adresse, das Subnetz und die VPC:

    gcloud compute networks subnets delete \
        subnet-$NAME_SUFFIX-$REGION --region=$REGION --quiet
    
    gcloud compute networks delete network-$NAME_SUFFIX --quiet
    

Nächste Schritte