Failover für das interne TCP/UDP-Load-Balancing konfigurieren

Diese Anleitung vermittelt anhand eines Beispiels, wie Sie Failover für einen internen TCP/UDP-Load-Balancer von Google Cloud konfigurieren. Bevor Sie sie durchgehen, machen Sie sich mit folgenden Themen vertraut:

Berechtigungen

Damit Sie dieser Anleitung folgen können, müssen Sie Instanzen erstellen und ein Netzwerk in einem Projekt ändern. Sie sollten daher entweder Inhaber oder Bearbeiter des Projekts sein oder über alle folgenden IAM-Rollen für Compute Engine verfügen:

Aufgabe Erforderliche Rolle
Netzwerke, Subnetze und Load-Balancer-Komponenten erstellen Netzwerkadministrator
Firewallregeln hinzufügen und löschen Sicherheitsadministrator
Instanzen erstellen Compute-Instanzadministrator

Weitere Informationen finden Sie in folgenden Leitfäden:

Einrichtung

In dieser Anleitung erfahren Sie, wie Sie einen internen TCP/UDP-Load-Balancer konfigurieren und testen, der Failover verwendet. Die Schritte in diesem Abschnitt erläutern, wie Sie folgende Elemente konfigurieren:

  1. Ein VPC-Netzwerk mit benutzerdefinierten Subnetzen als Beispiel
  2. Firewall-Regeln, die eingehende Verbindung zu Back-End-VMs ermöglichen
  3. Back-End-VMs
    • Ein primäres Back-End in einer nicht verwalteten Instanzgruppe in Zone us-west1-a
    • Ein Failover-Back-End in einer nicht verwalteten Instanzgruppe in Zone us-west1-c
  4. Eine Client-VM zum Testen von Verbindungen und Beobachten des Failover-Verhaltens
  5. Die folgenden Komponenten für den internen TCP/UDP-Load-Balancer:
    • Eine Systemdiagnose für den Back-End-Dienst
    • Ein interner Back-End-Dienst in der Region us-west1, um die Verteilung von Verbindungen zwischen den Back-End-VMs zu verwalten
    • Eine interne Weiterleitungsregel und eine interne IP-Adresse für das Front-End des Load-Balancers

Die Architektur dieses Beispiels sieht so aus:

Einfaches Failover-Beispiel für internes TCP/UDP-Load-Balancing (zum Vergrößern klicken)
Einfaches Failover-Beispiel für das interne TCP/UDP-Load-Balancing (zum Vergrößern anklicken)

Netzwerk, Region und Subnetz konfigurieren

Dieses Beispiel verwendet ein VPC-Netzwerk, eine Region und Subnetz mit den folgenden Parametern:

Gehen Sie so vor, um das Netzwerk und das Subnetz zu erstellen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „VPC-Netzwerke“ auf.
    Zur VPC-Netzwerkseite
  2. Klicken Sie auf VPC-Netzwerk erstellen.
  3. Geben Sie als Name lb-network ein.
  4. Im Bereich Subnetze:
    • Legen Sie Modus für Subnetzerstellung auf Benutzerdefiniert fest.
    • Geben Sie im Bereich Neues Subnetz folgende Informationen ein:
      • Name: lb-subnet
      • Region: us-west1
      • IP-Adressbereich: 10.1.2.0/24
      • Klicken Sie auf Fertig.
  5. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie das benutzerdefinierte VPC-Netzwerk:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Erstellen Sie ein Subnetz im Netzwerk lb-network in der Region us-west1:

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

API

Stellen Sie eine POST-Anfrage an die Methode networks.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks

{
 "routingConfig": {
   "routingMode": "REGIONAL"
 },
 "name": "lb-network",
 "autoCreateSubnetworks": false
}

Stellen Sie eine POST-Anfrage an die Methode subnetworks.insert. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.1.2.0/24",
 "privateIpGoogleAccess": false
}

Firewallregeln konfigurieren

Dieses Beispiel verwendet die folgenden Firewallregeln:

  • fw-allow-lb-subnet: Eine Regel für eingehenden Traffic, die für alle Ziele im VPC-Netzwerk gilt und Traffic aus Quellen im Bereich 10.1.2.0/24 zulässt. Mit dieser Regel wird für eingehenden Traffic von jeder Quelle innerhalb von lb-subnet zu den Instanzen (VMs) ein Load-Balancing vorgenommen.

  • fw-allow-ssh: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und eingehende SSH-Verbindungen über TCP-Port 22 von allen IP-Adressen zulässt. Sie können einen eingeschränkteren IP-Bereich von Quellen für diese Regel auswählen. Geben Sie dazu beispielsweise nur die IP-Bereiche des Systems an, von dem aus Sie SSH-Sitzungen initiieren. In diesem Beispiel wird das Ziel-Tag allow-ssh verwendet, um die VMs zu identifizieren, auf welche die Firewallregel angewendet wird.

  • fw-allow-health-check: Eine Regel für eingehenden Traffic, die für die Instanzen mit Load-Balancing gilt und Traffic von den Google Cloud-Systemen für Systemdiagnosen zulässt (130.211.0.0/22 und 35.191.0.0/16). In diesem Beispiel wird das Ziel-Tag allow-health-check verwendet, um die Instanzen zu identifizieren, auf die sie angewendet werden soll.

Ohne diese Firewallregeln blockiert die Standardregel zum Ablehnen von eingehendem Traffic den eingehenden Traffic zu den Back-End-Instanzen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Firewallregeln“ auf.
    Zur Seite "Firewallregeln"
  2. Klicken Sie auf Firewallregel erstellen und geben Sie folgende Informationen ein, um die Regel zu erstellen, die Subnetztraffic zulässt:
    • Name: fw-allow-lb-subnet
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Alle Instanzen im Netzwerk
    • Quellfilter: IP ranges
    • Quell-IP-Bereiche: 10.1.2.0/24
    • Protokolle und Ports: Alle zulassen
  3. Klicken Sie auf Erstellen.
  4. Klicken Sie noch einmal auf Firewallregel erstellen, um die Regel zu erstellen, die eingehende SSH-Verbindungen zulässt:
    • Name: fw-allow-ssh
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Ziel-Tags
    • Ziel-Tags: allow-ssh
    • Quellfilter: IP ranges
    • Quell-IP-Bereiche: 0.0.0.0/0
    • Protokolle und Ports: Wählen Sie Angegebene Protokolle und Ports aus und geben Sie Folgendes ein: tcp:22
  5. Klicken Sie auf Erstellen.
  6. Klicken Sie ein drittes Mal auf Firewallregel erstellen, um die Regel zum Zulassen von Google Cloud-Systemdiagnosen zu erstellen:
    • Name: fw-allow-health-check
    • Netzwerk: lb-network
    • Priorität: 1000
    • Trafficrichtung: Eingehend
    • Aktion bei Übereinstimmung: Zulassen
    • Ziele: Angegebene Ziel-Tags
    • Ziel-Tags: allow-health-check
    • Quellfilter: IP ranges
    • Quell-IP-Bereiche: 130.211.0.0/22 und 35.191.0.0/16
    • Protokolle und Ports: Alle zulassen
  7. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie die Firewallregel fw-allow-lb-subnet, um die Kommunikation mit dem Subnetz zuzulassen:

    gcloud compute firewall-rules create fw-allow-lb-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Erstellen Sie die Firewallregel fw-allow-ssh, um SSH-Verbindungen zu VMs mit dem Netzwerk-Tag allow-ssh zu ermöglichen. Wenn Sie source-ranges weglassen, bezieht Google Cloud die Regel auf jede Quelle.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Erstellen Sie die Regel fw-allow-health-check, um Google Cloud-Systemdiagnosen zuzulassen.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

API

Erstellen Sie die Firewallregel fw-allow-lb-subnet. Stellen Sie dazu eine POST-Anfrage an die Methode firewalls.insert. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "10.1.2.0/24"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

Erstellen Sie die Firewallregel fw-allow-ssh. Stellen Sie dazu eine POST-Anfrage an die Methode firewalls.insert. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-ssh",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "0.0.0.0/0"
 ],
 "targetTags": [
   "allow-ssh"
 ],
 "allowed": [
  {
    "IPProtocol": "tcp",
    "ports": [
      "22"
    ]
  }
 ],
"direction": "INGRESS",
"logConfig": {
  "enable": false
},
"disabled": false
}

Erstellen Sie die Firewallregel fw-allow-health-check. Stellen Sie dazu eine POST-Anfrage an die Methode firewalls.insert. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-health-check",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "130.211.0.0/22",
   "35.191.0.0/16"
 ],
 "targetTags": [
   "allow-health-check"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

Back-End-VMs und Instanzgruppen erstellen

In diesem Schritt erstellen Sie die Back-End-VMs und nicht verwalteten Instanzgruppen:

  • Die Instanzgruppe ig-a in us-west1-a ist ein Failover-Back-End mit zwei VMs:
    • vm-a1
    • vm-a2
  • Die Instanzgruppe ig-c in us-west1-c ist ein Failover-Back-End mit zwei VMs:
    • vm-c1
    • vm-c2

Das primäre und das Failover-Back-End werden in getrennten Zonen platziert, um die Anleitung zu vereinfachen und das Failover zu ermöglichen, falls eine Zone ausfällt.

Jede primäre und Backup-VM ist so konfiguriert, dass ein Apache-Webserver auf den TCP-Ports 80 und 443 ausgeführt wird. Jeder VM wird eine interne IP-Adresse im lb-subnet für den Clientzugriff und eine sitzungsspezifische externe (öffentliche) IP-Adresse für den SSH-Zugriff zugewiesen. Informationen zum Entfernen externer IP-Adressen finden Sie unter Externe IP-Adressen aus Back-End-VMs entfernen.

Apache ist standardmäßig für die Bindung an eine beliebige IP-Adresse konfiguriert. Interne TCP/UDP-Load-Balancer liefern Pakete aus und behalten dabei die Ziel-IP-Adresse bei.

Achten Sie darauf, dass die auf Ihren primären und Backup-VMs ausgeführte Serversoftware die IP-Adresse der internen Weiterleitungsregel des Load-Balancers überwacht. Wenn Sie mehrere interne Weiterleitungsregeln konfigurieren, achten Sie darauf, dass Ihre Software die interne IP-Adresse überwacht, die mit diesen Regeln verknüpft ist. Die Ziel-IP-Adresse eines Pakets, das ein interner TCP/UDP-Load-Balancer an eine Back-End-VM liefert, ist die interne IP-Adresse der Weiterleitungsregel.

Zur Vereinfachung der Anleitung führen alle primären und Back-End-VMs Debian GNU/Linux 10 aus.

Console

Back-End-VMs erstellen

  1. Rufen Sie in der Google Cloud Console die Seite „VM-Instanzen” auf.
    Zur Seite "VM-Instanzen"
  2. Wiederholen Sie die nachstehenden Schritte, um vier VMs mit den folgenden Kombinationen aus Name und Zone zu erstellen.
    • Name: vm-a1, Zone: us-west1-a
    • Name: vm-a2, Zone: us-west1-a
    • Name: vm-c1, Zone: us-west1-c
    • Name: vm-c2, Zone: us-west1-c
  3. Klicken Sie auf Instanz erstellen.
  4. Legen Sie den Namen wie in Schritt 2 angegeben fest.
  5. Wählen Sie für die Region us-west1 aus und legen Sie die Zone wie in Schritt 2 angegeben fest.
  6. Prüfen Sie unter Bootlaufwerk, ob das ausgewählte Image Debian GNU/Linux 10 (Buster) ist. Klicken Sie auf Auswählen, wenn Sie das Image ändern möchten.
  7. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten und nehmen Sie die folgenden Änderungen vor:

    • Klicken Sie auf Netzwerk und fügen Sie die folgenden Netzwerk-Tags hinzu: allow-ssh und allow-health-check
    • Klicken Sie unter Netzwerkschnittstellen auf die Schaltfläche "Bearbeiten", nehmen Sie die folgenden Änderungen vor und klicken Sie auf Fertig:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
      • Primäre interne IP: flüchtig (automatisch)
      • Externe IP: sitzungsspezifisch
    • Klicken Sie auf Verwaltung. Kopieren Sie den folgenden Skriptinhalt und fügen Sie ihn im Feld Startskript ein. Der Skriptinhalt ist für alle vier VMs gleich:

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. Klicken Sie auf Erstellen.

Instanzgruppen erstellen

  1. Öffnen Sie in der Google Cloud Console die Seite "Instanzgruppen".
    Zur Seite "Instanzgruppen"
  2. Wiederholen Sie die folgenden Schritte, um mit diesen Kombinationen zwei nicht verwaltete Instanzgruppen mit jeweils zwei VMs zu erstellen.
    • Instanzgruppe: ig-a, Zone: us-west1-a, VMs: vm-a1 und vm-a2
    • Instanzgruppe: ig-c, Zone: us-west1-c, VMs: vm-c1 und vm-c2
  3. Klicken Sie auf Instanzgruppe erstellen.
  4. Klicken Sie auf Neue nicht verwaltete Instanzgruppe.
  5. Legen Sie Name wie in Schritt 2 angegeben fest.
  6. Wählen Sie im Bereich Standort als Region us-west1 aus und legen Sie dann wie in Schritt 2 angegeben eine Zone fest.
  7. Geben Sie bei Netzwerk den Parameter lb-network ein.
  8. Geben Sie bei Subnetzwerk den Parameter lb-subnet ein.
  9. Fügen Sie im Bereich VM-Instanzen die in Schritt 2 angegebenen VMs hinzu.
  10. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie vier VMs, indem Sie den folgenden Befehl viermal ausführen und die nachstehenden vier Kombinationen für VM_NAME und ZONE verwenden. Der Skriptinhalt ist für alle vier VMs identisch.

    • VM_NAME: vm-a1; ZONE: us-west1-a
    • VM_NAME: vm-a2; ZONE: us-west1-a
    • VM_NAME: vm-c1; ZONE: us-west1-c
    • VM_NAME: vm-c2; ZONE: us-west1-c
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. Erstellen Sie die zwei nicht verwalteten Instanzgruppen in jeder Zone:

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. Fügen Sie den entsprechenden Instanzgruppen die VMs hinzu:

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

API

Erstellen Sie jetzt vier Back-End-VMs. Stellen Sie dazu vier POST-Anfragen an die Methode instances.insert.

Verwenden Sie für die vier VMs die folgenden VM-Namen und -Zonen:

  • VM_NAME: vm-a1; ZONE: us-west1-a
  • VM_NAME: vm-a2; ZONE: us-west1-a
  • VM_NAME: vm-c1; ZONE: us-west1-c
  • VM_NAME: vm-c2; ZONE: us-west1-c

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • ZONE: Zone der Instanz
  • DEBIAN_IMAGE_NAME ist der Name des Debian-Images für die Instanz. Der aktuelle DEBIAN_IMAGE_NAME kann mit dem folgenden gcloud-Befehl abgerufen werden:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Erstellen Sie nun zwei Instanzgruppen. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.insert. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-a",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-c",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

Fügen Sie jeder Instanzgruppe Instanzen hinzu. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.addInstances. Ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
   }
 ]
}

Client-VM erstellen

In diesem Beispiel wird eine Client-VM (vm-client) in derselben Region wie der Load-Balancer erstellt. Mit dem Client wird die Funktionsweise von Failover demonstriert.

Console

  1. Rufen Sie in der Google Cloud Console die Seite „VM-Instanzen” auf.
    Zur Seite „VM-Instanzen”
  2. Klicken Sie auf Instanz erstellen.
  3. Legen Sie als Name vm-client fest.
  4. Setzen Sie Zone auf us-west1-a.
  5. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten und nehmen Sie die folgenden Änderungen vor:
    • Klicken Sie auf Vernetzung und fügen Sie allow-ssh an die Netzwerk-Tags hinzu.
    • Klicken Sie unter Netzwerkschnittstellen auf die Schaltfläche "Bearbeiten", nehmen Sie die folgenden Änderungen vor und klicken Sie auf Fertig:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
      • Primäre interne IP: flüchtig (automatisch)
      • Externe IP: sitzungsspezifisch
  6. Klicken Sie auf Erstellen.

gcloud

Die Client-VM kann sich in einer beliebigen Zone in derselben Region wie der Load-Balancer befinden. Außerdem kann sie jedes Subnetz in dieser Region verwenden. In diesem Beispiel befindet sich der Client in der Zone us-west1-a und verwendet dasselbe Subnetz wie die primäre und die Backup-VM.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

Stellen Sie eine POST-Anfrage an die Methode instances.insert.

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • DEBIAN_IMAGE_NAME ist der Name des Debian-Images für die Instanz. Der aktuelle DEBIAN_IMAGE_NAME kann mit dem folgenden gcloud-Befehl abgerufen werden:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Komponenten für den Load-Balancer konfigurieren

In diesen Schritten konfigurieren Sie alle Komponenten für den internen TCP/UDP-Load-Balancer. Zuerst konfigurieren Sie die Systemdiagnose und den Back-End-Dienst und danach die Front-End-Komponenten:

  • Systemdiagnose: Dieses Beispiel verwendet eine HTTP-Systemdiagnose, die nur auf die HTTP-Antwort 200 (OK) prüft. Weitere Informationen finden Sie im Abschnitt "Systemdiagnosen" der Übersicht über das interne TCP/UDP-Load-Balancing.

  • Back-End-Dienst: Da im Beispiel HTTP-Traffic über den internen Load-Balancer weitergeleitet wird, gibt die Konfiguration TCP und nicht UDP an. Zur Illustration von Failover hat dieser Back-End-Dienst eine Failover-Quote von 0.75.

  • Weiterleitungsregel: Dieses Beispiel erstellt eine einzelne interne Weiterleitungsregel.

  • Interne IP-Adresse: In diesem Beispiel wird bei der Erstellung der Weiterleitungsregel eine interne IP-Adresse (10.1.2.99) festgelegt.

Console

Load-Balancer erstellen und Back-End-Dienst konfigurieren

  1. Öffnen Sie in der Google Cloud Console die Seite "Load-Balancing".
    Zur Seite "Load-Balancing"
  2. Klicken Sie auf Load-Balancer erstellen.
  3. Klicken Sie unter TCP-Load-Balancing auf Konfiguration starten.
  4. Wählen Sie unter Internet oder nur intern die Option Nur zwischen meinen VMs aus.
  5. Klicken Sie auf Weiter.
  6. Legen Sie als Name be-ilb fest.
  7. Klicken Sie auf Back-End-Konfiguration und nehmen Sie folgende Änderungen vor:
    1. Region: us-west1
    2. Netzwerk: lb-network
    3. Wählen Sie unter Back-Ends im Bereich Neues Element die Instanzgruppe ig-a aus. Achten Sie darauf, dass Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden nicht aktiviert ist. Klicken Sie auf Fertig.
    4. Klicken Sie auf Back-End hinzufügen. Wählen Sie im angezeigten Bereich Neues Element die Instanzgruppe ig-c aus. Klicken Sie das Kästchen Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden an. Klicken Sie auf Fertig.
    5. Wählen Sie unter Systemdiagnose die Option Weitere Systemdiagnose erstellen aus, geben Sie die folgenden Informationen ein und klicken Sie auf Speichern und fortfahren:
      • Name: hc-http-80
      • Protokoll: HTTP
      • Port: 80
      • Proxyprotokoll: NONE
      • Anfragepfad: / Wenn Sie die Cloud Console zum Erstellen des Load-Balancers verwenden, ist die Systemdiagnose global. Wenn Sie eine regionale Systemdiagnose erstellen möchten, verwenden Sie gcloud oder die API.
    6. Klicken Sie auf Erweiterte Konfigurationen. Konfigurieren Sie im Abschnitt Failover-Richtlinie Folgendes:
      • Failover-Quote: 0.75
      • Aktivieren Sie Verbindungsausgleich bei Failover aktivieren.
    7. Überprüfen Sie, bevor Sie fortfahren, ob sich neben Back-End-Konfiguration ein blaues Häkchen befindet. Gehen Sie diesen Schritt noch einmal durch, wenn nicht.
  8. Klicken Sie auf Front-End-Konfiguration. Nehmen Sie im Bereich Neue Front-End-IP-Adresse und neuer Front-End-Port die folgenden Änderungen vor:
    1. Name: fr-ilb
    2. Subnetzwerk: ilb-subnet
    3. Wählen Sie unter Interne IP-Adresse die Option Statische interne IP-Adresse reservieren aus, geben Sie die folgenden Informationen ein und klicken Sie dann auf Reservieren:
      • Name: ip-ilb
      • Statische IP-Adresse: Selbst auswählen
      • Benutzerdefinierte IP-Adresse: 10.1.2.99
    4. Ports: Wählen Sie Einzeln aus und geben Sie als Portnummer 80 ein.
    5. Überprüfen Sie, bevor Sie fortfahren, ob sich neben der Front-End-Konfiguration ein blaues Häkchen befindet. Gehen Sie diesen Schritt noch einmal durch, wenn nicht.
  9. Klicken Sie auf Prüfen und abschließen. Kontrollieren Sie die Einstellungen.
  10. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie eine neue HTTP-Systemdiagnose, um die TCP-Konnektivität zu den VMs auf Port 80 zu testen.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Erstellen Sie den Back-End-Dienst für HTTP-Traffic:

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1 \
        --failover-ratio 0.75
    
  3. Fügen Sie dem Back-End-Dienst ein primäres Back-End hinzu:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. Fügen Sie dem Back-End-Dienst ein Failover-Back-End hinzu:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c \
        --failover
    
  5. Erstellen Sie eine Weiterleitungsregel für den Back-End-Dienst. Wenn Sie die Weiterleitungsregel erstellen, geben Sie 10.1.2.99 für die interne IP-Adresse im Subnetz an.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

Erstellen Sie die Systemdiagnose. Stellen Sie dazu eine POST-Anfrage an die Methode regionHealthChecks.insert. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks

{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
  "port": 80
}
}

Erstellen Sie den regionalen Back-End-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "be-ilb",
"backends": [
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
    "balancingMode": "CONNECTION"
  },
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
    "balancingMode": "CONNECTION"
    "failover": true
  }
],
"failoverPolicy": {
  "failoverRatio": 0.75
},
"healthChecks": [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
  "drainingTimeoutSec": 0
 }
}

Erstellen Sie die Weiterleitungsregel. Stellen Sie dazu eine POST-Anfrage an die Methode forwardingRules.insert. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

Test

Diese Tests zeigen Ihnen, wie Sie die Konfiguration des Load-Balancers validieren und das erwartete Verhalten ermitteln können.

Testverfahren für Clients

Dieses Verfahren nimmt von der Client-VM aus Verbindung mit dem Load-Balancer auf. Verwenden Sie dieses Verfahren für die anderen Tests.

  1. Stellen Sie eine Verbindung zur Client-VM-Instanz her.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Stellen Sie mit curl eine Webanfrage an den Load-Balancer, um dessen IP-Adresse zu kontaktieren.

    curl http://10.1.2.99
    
  3. Beachten Sie den vom Befehl curl zurückgegebenen Text. Der Name der Back-End-VM, die die Antwort generiert, wird in diesem Text angezeigt. Beispiel: Page served from: vm-a1

Ausgangszustand testen

Nachdem Sie den Beispiel-Load-Balancer konfiguriert haben, sollten alle vier Back-End-VMs fehlerfrei sein:

  • Die beiden primären VMs vm-a1 und vm-a2
  • Die beiden Backup-VMs vm-c1 und vm-c2

Folgen Sie dem Testverfahren für Clients. Wiederholen Sie den zweiten Schritt einige Male. Das erwartete Verhalten besteht darin, dass der Traffic von den beiden primären VMs vm-a1 und vm-a2 bereitgestellt wird, da beide fehlerfrei sind. Jede primäre VM sollte etwa in der Hälfte der Fälle eine Antwort liefern, da für diesen Load-Balancer keine Sitzungsaffinität konfiguriert wurde.

Failover testen

Dieser Test simuliert den Ausfall von vm-a1, sodass Sie das Failover-Verhalten beobachten können.

  1. Stellen Sie eine Verbindung zur VM vm-a1 her.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Halten Sie den Apache-Webserver an. Nach zehn Sekunden erkennt Google Cloud diese VM als fehlerhaft. (Die im Rahmen der Konfiguration erstellte Systemdiagnose hc-http-80 verwendet das Standardprüfintervall von fünf Sekunden und als Fehlerschwellenwert zwei aufeinanderfolgende fehlgeschlagene Versuche.)

    sudo apachectl stop
    
  3. Folgen Sie dem Testverfahren für Clients. Wiederholen Sie den zweiten Schritt einige Male. Das erwartete Verhalten besteht darin, dass der Traffic von den beiden Backup-VMs vm-c1 und vm-c2 bereitgestellt wird. Da nur eine primäre VM, vm-a2, fehlerfrei ist, beträgt das Verhältnis der Zahl fehlerfreier primärer VMs zur Gesamtzahl primärer VMs 0.5. Diese Zahl liegt unter dem Failover-Schwellenwert von 0.75. Daher hat Google Cloud den aktiven Pool des Load-Balancers neu konfiguriert, um die Sicherungs-VMs zu verwenden. Nun sollte jede Backup-VM etwa in der Hälfte der Fälle eine Antwort geben, wenn für diesen Load-Balancer keine Sitzungsaffinität konfiguriert ist.

Failback testen

Dieser Test simuliert ein Failback durch den Neustart des Apache-Servers auf vm-a1.

  1. Stellen Sie eine Verbindung zur VM vm-a1 her.

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. Starten Sie den Apache-Webserver und warten Sie zehn Sekunden.

    sudo apachectl start
    
  3. Folgen Sie dem Testverfahren für Clients. Wiederholen Sie den zweiten Schritt einige Male. Das erwartete Verhalten besteht darin, dass der Traffic von den beiden primären VMs vm-a1 und vm-a2 bereitgestellt wird. Da beide primären VMs fehlerfrei sind, liegt das Verhältnis der Anzahl fehlerfreier primärer VMs zur Gesamtzahl primärer VMs bei 1.0 und damit über dem Failover-Schwellenwert von 0.75. Daher hat Google Cloud den aktiven Pool so konfiguriert, dass wieder die primären VMs verwendet werden.

Weitere Back-End-VMs hinzufügen

In diesem Abschnitt wird die Beispielkonfiguration erweitert, indem dem Load-Balancer weitere primäre und Backup-VMs hinzugefügt werden. Dazu werden zwei weitere Back-End-Instanzgruppen erstellt, um zu zeigen, dass Sie primäre und Backup-VMs auf mehrere Zonen in derselben Region verteilen können:

  • Eine dritte Instanzgruppe, ig-d in us-west1-c, dient als primäres Back-End mit zwei VMs:
    • vm-d1
    • vm-d2
  • Die vierte Instanzgruppe, ig-b in us-west1-a, dient als Failover-Back-End mit zwei VMs:
    • vm-b1
    • vm-b2

Die geänderte Architektur dieses Beispiels sieht so aus:

Failover für das interne TCP/UDP-Load-Balancing mit mehreren Zonen (zum Vergrößern klicken)
Failover für das interne TCP/UDP-Load-Balancing mit mehreren Zonen (zum Vergrößern anklicken)

Zusätzliche VMs und Instanzgruppen erstellen

Führen Sie die folgenden Schritte aus, um die zusätzlichen primären und Backup-VMs sowie die zugehörigen nicht verwalteten Instanzgruppen zu erstellen.

Console

Back-End-VMs erstellen

  1. Rufen Sie in der Google Cloud Console die Seite „VM-Instanzen” auf.
    Zur Seite "VM-Instanzen"
  2. Wiederholen Sie die nachstehenden Schritte, um vier VMs mit den folgenden Kombinationen aus Name und Zone zu erstellen.
    • Name: vm-b1, Zone: us-west1-a
    • Name: vm-b2, Zone: us-west1-a
    • Name: vm-d1, Zone: us-west1-c
    • Name: vm-d2, Zone: us-west1-c
  3. Klicken Sie auf Instanz erstellen.
  4. Legen Sie den Namen wie in Schritt 2 angegeben fest.
  5. Wählen Sie für die Region us-west1 aus und legen Sie die Zone wie in Schritt 2 angegeben fest.
  6. Prüfen Sie unter Bootlaufwerk, ob das ausgewählte Image Debian GNU/Linux 10 (Buster) ist. Klicken Sie auf Auswählen, wenn Sie das Image ändern möchten.
  7. Klicken Sie auf Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten und nehmen Sie die folgenden Änderungen vor:

    • Klicken Sie auf Netzwerk und fügen Sie die folgenden Netzwerk-Tags hinzu: allow-ssh und allow-health-check
    • Klicken Sie unter Netzwerkschnittstellen auf die Schaltfläche "Bearbeiten", nehmen Sie die folgenden Änderungen vor und klicken Sie auf Fertig:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
      • Primäre interne IP: flüchtig (automatisch)
      • Externe IP: sitzungsspezifisch
    • Klicken Sie auf Verwaltung. Kopieren Sie den folgenden Skriptinhalt und fügen Sie ihn im Feld Startskript ein. Der Skriptinhalt ist für alle vier VMs gleich:

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  8. Klicken Sie auf Erstellen.

Instanzgruppen erstellen

  1. Öffnen Sie in der Google Cloud Console die Seite "Instanzgruppen".
    Zur Seite "Instanzgruppen"
  2. Wiederholen Sie die folgenden Schritte, um mit diesen Kombinationen zwei nicht verwaltete Instanzgruppen mit jeweils zwei VMs zu erstellen.
    • Instanzgruppe: ig-b, Zone: us-west1-a, VMs: vm-b1 und vm-b2
    • Instanzgruppe: ig-d, Zone: us-west1-c, VMs: vm-d1 und vm-d2
  3. Klicken Sie auf Instanzgruppe erstellen.
  4. Klicken Sie auf Neue nicht verwaltete Instanzgruppe.
  5. Legen Sie Name wie in Schritt 2 angegeben fest.
  6. Wählen Sie im Bereich Standort als Region us-west1 aus und legen Sie dann wie in Schritt 2 angegeben eine Zone fest.
  7. Geben Sie bei Netzwerk den Parameter lb-network ein.
  8. Geben Sie bei Subnetzwerk den Parameter lb-subnet ein.
  9. Fügen Sie im Bereich VM-Instanzen die in Schritt 2 angegebenen VMs hinzu.
  10. Klicken Sie auf Erstellen.

gcloud

  1. Erstellen Sie vier VMs, indem Sie den folgenden Befehl viermal ausführen und die nachstehenden vier Kombinationen für VM_NAME und ZONE verwenden. Der Skriptinhalt ist für alle vier VMs identisch.

    • VM_NAME: vm-b1; ZONE: us-west1-a
    • VM_NAME: vm-b2; ZONE: us-west1-a
    • VM_NAME: vm-d1; ZONE: us-west1-c
    • VM_NAME: vm-d2; ZONE: us-west1-c
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. Erstellen Sie die zwei nicht verwalteten Instanzgruppen in jeder Zone:

    gcloud compute instance-groups unmanaged create ig-b \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-d \
        --zone=us-west1-c
    
  3. Fügen Sie den entsprechenden Instanzgruppen die VMs hinzu:

    gcloud compute instance-groups unmanaged add-instances ig-b \
        --zone=us-west1-a \
        --instances=vm-b1,vm-b2
    gcloud compute instance-groups unmanaged add-instances ig-d \
        --zone=us-west1-c \
        --instances=vm-d1,vm-d2
    

API

Erstellen Sie jetzt vier Back-End-VMs. Stellen Sie dazu vier POST-Anfragen an die Methode instances.insert.

Verwenden Sie für die vier VMs die folgenden VM-Namen und -Zonen:

  • VM_NAME: vm-b1; ZONE: us-west1-a
  • VM_NAME: vm-b2; ZONE: us-west1-a
  • VM_NAME: vm-d1; ZONE: us-west1-c
  • VM_NAME: vm-d2; ZONE: us-west1-c

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • DEBIAN_IMAGE_NAME ist der Name des Debian-Images für die Instanz. Der aktuelle DEBIAN_IMAGE_NAME kann mit dem folgenden gcloud-Befehl abgerufen werden:

    gcloud compute images list \
     --filter="family=debian-10"
    

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM_NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM_NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

Erstellen Sie nun zwei Instanzgruppen. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.insert. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-b",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-d",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

Fügen Sie jeder Instanzgruppe Instanzen hinzu. Stellen Sie dazu eine POST-Anfrage an die Methode instanceGroups.addInstances. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-b/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-b2"
   }
 ]
}

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-d/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-d2"
   }
 ]
}

Primäres Back-End hinzufügen

Dieses Verfahren kann als Vorlage dienen, um dem Back-End-Dienst eines vorhandenen internen TCP/UDP-Load-Balancers eine nicht verwaltete Instanzgruppe als primäres Back-End hinzuzufügen. Im konkreten Fall der Beispielkonfiguration zeigt das Verfahren, wie Sie dem Load-Balancer ig-d die Instanzgruppe be-ilb als primäres Back-End hinzufügen.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „Load-Balancing“.
    Zur Seite "Load-Balancing"
  2. Klicken Sie auf dem Tab Load-Balancer auf den Namen eines vorhandenen internen TCP- oder UDP-Load-Balancers (in diesem Beispiel be-ilb).
  3. Klicken Sie auf Bearbeiten .
  4. Klicken Sie in der Back-End-Konfiguration auf Back-End hinzufügen und wählen Sie eine nicht verwaltete Instanzgruppe aus (in diesem Beispiel ig-d).
  5. Achten Sie darauf, dass Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden nicht aktiviert ist.
  6. Klicken Sie auf Fertig und anschließend auf Aktualisieren.

gcloud

Verwenden Sie den folgenden Befehl gcloud, um ein primäres Back-End zu einem vorhandenen internen TCP/UDP-Load-Balancer-Back-End-Dienst hinzuzufügen.

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION

Dabei gilt:

  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers Verwenden Sie für das Beispiel be-ilb.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll. Verwenden Sie für das Beispiel ig-d.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist. Verwenden Sie für das Beispiel us-west1-c.
  • REGION ist die Region des Load-Balancers. Verwenden Sie für das Beispiel us-west1.

API

Fügen Sie einem vorhandenen Back-End-Dienst mit der Methode regionBackendServices.patch ein Failover-Back-End hinzu.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • REGION ist die Region des Load-Balancers. Verwenden Sie für das Beispiel us-west1.
  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers Verwenden Sie für das Beispiel be-ilb.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll. Verwenden Sie für das Beispiel ig-d.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist. Verwenden Sie für das Beispiel us-west1-c.

Failover-Back-End hinzufügen

Dieses Verfahren kann als Vorlage dienen, um dem Back-End-Dienst eines vorhandenen internen TCP/UDP-Load-Balancers eine nicht verwaltete Instanzgruppe als Failover-Back-End hinzuzufügen. Im konkreten Fall der Beispielkonfiguration zeigt das Verfahren, wie Sie dem Load-Balancer ig-b die Instanzgruppe be-ilb als primäres Back-End hinzufügen.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „Load-Balancing“.
    Zur Seite "Load-Balancing"
  2. Klicken Sie auf dem Tab Load-Balancer auf den Namen eines vorhandenen internen TCP- oder UDP-Load-Balancers (in diesem Beispiel be-ilb).
  3. Klicken Sie auf Bearbeiten .
  4. Klicken Sie in der Back-End-Konfiguration auf Back-End hinzufügen und wählen Sie eine nicht verwaltete Instanzgruppe aus (in diesem Beispiel ig-b).
  5. Aktivieren Sie Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden.
  6. Klicken Sie auf Fertig und anschließend auf Aktualisieren.

gcloud

Verwenden Sie den folgenden Befehl gcloud, um ein Failover-Back-End zu einem vorhandenen internen TCP/UDP-Load-Balancer-Back-End-Dienst hinzuzufügen.

gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

Dabei gilt:

  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers Verwenden Sie für das Beispiel be-ilb.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll. Verwenden Sie für das Beispiel ig-b.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist. Verwenden Sie für das Beispiel us-west1-a.
  • REGION ist die Region des Load-Balancers. Verwenden Sie für das Beispiel us-west1.

API

Fügen Sie einem vorhandenen Back-End-Dienst mit der Methode regionBackendServices.patch ein Failover-Back-End hinzu.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "balancingMode": "connection",
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers Verwenden Sie für das Beispiel be-ilb.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll. Verwenden Sie für das Beispiel ig-b.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist. Verwenden Sie für das Beispiel us-west1-a.
  • REGION ist die Region des Load-Balancers. Verwenden Sie für das Beispiel us-west1.

Primäres oder Failover-Backend konvertieren

Sie können ein primäres Back-End in ein Failover-Back-End konvertieren oder umgekehrt, ohne die Instanzgruppe aus dem Back-End-Dienst des internen TCP/UDP-Load-Balancers zu entfernen.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite „Load-Balancing“.
    Zur Seite "Load-Balancing"
  2. Klicken Sie auf dem Tab Load-Balancer auf den Namen eines vorhandenen internen TCP- oder UDP-Load-Balancers.
  3. Klicken Sie auf Bearbeiten .
  4. Klicken Sie im Menü Back-End-Konfiguration auf den Namen einer der Back-End-Instanzgruppen. Gehen Sie anschließend so vor:
    • Aktivieren Sie Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden, um diese Instanzgruppe zu einem Failover-Back-End zu machen.
    • Deaktivieren Sie Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden, um diese Instanzgruppe zu einem primären Back-End zu machen.
  5. Klicken Sie auf Fertig und anschließend auf Aktualisieren.

gcloud

Verwenden Sie den folgenden Befehl gcloud, um ein vorhandenes primäres Back-End in ein Failover-Back-End umzuwandeln:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --failover

Verwenden Sie den folgenden Befehl gcloud, um ein vorhandenes Failover-Back-End in ein primäres Back-End umzuwandeln:

gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \
   --instance-group INSTANCE_GROUP_NAME \
   --instance-group-zone INSTANCE_GROUP_ZONE \
   --region REGION \
   --no-failover

Dabei gilt:

  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist.
  • REGION ist die Region des Load-Balancers.

API

Ein primäres Back-End können Sie in ein Failover-Back-End oder umgekehrt umwandeln. Verwenden Sie dazu die Methode regionBackendServices.patch.

So konvertieren Sie ein primäres Back-End in ein Failover-Back-End:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "failover": true,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ]
}

So konvertieren Sie ein Failover-Back-End in ein primäres Back-End:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "backends":
  [
    {
      "failover": false,
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/INSTANCE_GROUP_ZONE/instanceGroups/INSTANCE_GROUP_NAME"
    }
  ],
}

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers.
  • INSTANCE_GROUP_NAME ist der Name der Instanzgruppe, die als primäres Back-End hinzugefügt werden soll.
  • INSTANCE_GROUP_ZONE ist die Zone, in der die Instanzgruppe definiert ist.
  • REGION ist die Region des Load-Balancers.

Failover-Richtlinien konfigurieren

In diesem Abschnitt wird beschrieben, wie Sie eine Failover-Richtlinie für den Back-End-Dienst eines internen TCP/UDP-Load-Balancers verwalten. Eine Failover-Richtlinie enthält die folgenden Parameter:

  • Failover-Quote
  • Traffic wird unterbrochen, wenn alle Back-End-VMs fehlerhaft sind
  • Verbindungsausgleich bei Failover

Weitere Informationen zu den Parametern einer Failover-Richtlinie finden Sie unter:

Eine Failover-Richtlinie definieren

In der folgenden Anleitung wird beschrieben, wie Sie die Failover-Richtlinie für einen vorhandenen internen TCP/UDP-Load-Balancer definieren.

Console

Zum Definieren einer Failover-Richtlinie mit der Cloud Console benötigen Sie mindestens ein Failover-Back-End.

  1. Öffnen Sie in der Google Cloud Console die Seite "Load-Balancing".
    Zur Seite "Load-Balancing"
  2. Wählen Sie auf dem Tab Load-Balancer die Load-Balancer-Option TCP (intern) oder UDP (intern).
  3. Klicken Sie auf Bearbeiten .
  4. Es muss mindestens ein Failover-Back-End vorhanden sein. Bei mindestens einem der Load-Balancer-Back-Ends muss die Option Diese Instanzgruppe als Failover-Gruppe für Sicherungen verwenden aktiviert sein.
  5. Klicken Sie auf Erweiterte Konfigurationen.
    • Stellen Sie unter Failover-Richtlinie für Failover-Quote einen Wert im Bereich von 0.0 bis 1.0 ein.
    • Aktivieren Sie Traffic unterbrechen. Der Traffic wird dann unterbrochen, wenn alle aktiven VMs und alle Backup-VMs fehlerhaft sind.
    • Aktivieren Sie Verbindungsausgleich bei Failover aktivieren, um bestehende Verbindungen während eines Failovers schnell zu beenden.
  6. Klicken Sie auf Prüfen und abschließen und dann auf Aktualisieren.

gcloud

Um eine Failover-Richtlinie mit dem gcloud-Befehlszeilentool zu definieren, aktualisieren Sie den Back-End-Dienst des Load-Balancers:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
   --region REGION \
   --failover-ratio FAILOVER_RATIO \
   --drop-traffic-if-unhealthy \
   --no-connection-drain-on-failover

Dabei gilt:

  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers Verwenden Sie für das Beispiel be-ilb.
  • REGION ist die Region des Load-Balancers. Verwenden Sie für das Beispiel us-west1.
  • FAILOVER_RATIO ist die Failover-Quote. Mögliche Werte liegen im Bereich von 0.0 bis 1.0. Verwenden Sie für das Beispiel 0.75.
  • --drop-traffic-if-unhealthy weist den Load-Balancer an, Traffic zu unterbrechen, wenn alle primären und alle Sicherungs-VMs fehlerhaft sind. Ändern Sie diesen Wert in --no-drop-traffic-if-unhealthy, wenn Sie den Traffic auf alle primären VMs verteilen möchten, wenn alle Back-End-VMs fehlerhaft sind.
  • --no-connection-drain-on-failover weist den Load-Balancer an, vorhandene TCP-Verbindungen während eines Failovers schnell zu beenden. Verwenden Sie --connection-drain-on-failover, um den Verbindungsausgleich während eines Failovers zu aktivieren.

API

Verwenden Sie die Methode regionBackendServices.patch zum Festlegen der Failover-Richtlinie.

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

{
  "failoverPolicy":
  {
    "failoverRatio": FAILOVER_RATIO,
    "dropTrafficIfUnhealthy": [true|false],
    "disableConnectionDrainOnFailover": [true|false]
  }
}

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • REGION ist die Region des Load-Balancers.
  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers.
  • FAILOVER_RATIO ist die Failover-Quote. Mögliche Werte liegen im Bereich von 0.0 bis 1.0.
  • Durch Festlegen von dropTrafficIfUnhealthy auf true wird der Load-Balancer angewiesen, Traffic zu unterbrechen, wenn alle primären und alle Sicherungs-VMs fehlerhaft sind. Setzen Sie diesen Wert auf false, wenn Sie Traffic auf alle primären VMs verteilen möchten, wenn alle Back-End-VMs fehlerhaft sind.
  • Durch Festlegen von disableConnectionDrainOnFailover auf true wird der Load-Balancer angewiesen, vorhandene TCP-Verbindungen bei einem Failover schnell zu beenden. Legen Sie hier false fest, um den Verbindungsausgleich während eines Failovers zu aktivieren.

Failover-Richtlinie aufrufen

In der folgenden Anleitung wird beschrieben, wie Sie die vorhandene Failover-Richtlinie für einen internen TCP/UDP-Load-Balancer anzeigen.

Console

In der Cloud Console werden die vorhandenen Einstellungen für Failover-Richtlinien angezeigt, wenn Sie einen internen TCP/UDP-Load-Balancer bearbeiten. Eine Anleitung hierzu finden Sie unter Eine Failover-Richtlinie definieren.

gcloud

Verwenden Sie den folgenden Befehl, um die Einstellungen der Failover-Richtlinie mithilfe des gcloud-Befehlszeilentools aufzulisten. Für nicht definierte Einstellungen in einer Failover-Richtlinie werden die Standardwerte der Failover-Richtlinie verwendet.

gcloud compute backend-services describe BACKEND_SERVICE_NAME \
   --region REGION \
   --format="get(failoverPolicy)"

Dabei gilt:

  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers.
  • REGION ist die Region des Load-Balancers.

API

Verwenden Sie die Methode regionBackendServices.get zum Aufrufen der Failover-Richtlinie.

Als Antwort auf die API-Anfrage wird die Failover-Richtlinie angezeigt. Hier ein Beispiel:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE_NAME

Dabei gilt:

  • PROJECT_ID: Ihre Projekt-ID
  • REGION ist die Region des Load-Balancers.
  • BACKEND_SERVICE_NAME ist der Name des Back-End-Dienstes des Load-Balancers.
{
...
"failoverPolicy": {
  "disableConnectionDrainOnFailover": false,
  "dropTrafficIfUnhealthy": false,
  "failoverRatio": 0.75
...
}

Nächste Schritte