Failover für interne Passthrough-Network Load Balancer konfigurieren

Diese Anleitung vermittelt anhand eines Beispiels, wie Sie Failover für einen internen Passthrough-Network 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 Passthrough-Network 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 Backend-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 Passthrough-Network Load Balancer:
    • Eine Systemdiagnose für den Backend-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 Frontend des Load-Balancers

Die Architektur dieses Beispiels sieht so aus:

Einfaches Failover-Beispiel für einen internen Passthrough-Network Load Balancer.
Einfaches Failover-Beispiel für einen internen Passthrough-Network Load Balancer (zum Vergrößern klicken).

In diesem Beispiel werden nicht verwaltete Instanzgruppen sowohl für das primäre Back-End als auch für das Failover-Back-End verwendet. Weitere Informationen finden Sie unter unterstützte Instanzgruppen.

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 Seite VPC-Netzwerke

  2. Klicken Sie auf VPC-Netzwerk erstellen.

  3. Geben Sie als Namen 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 der Firewall-Richtlinien auf.

    Zu den Firewall-Richtlinien

  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: IPv4-Bereiche.
    • IPv4-Quellbereiche: 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
    • Zieltags: allow-ssh
    • Quellfilter: IPv4-Bereiche.
    • IPv4-Quellbereiche: 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
    • Zieltags: allow-health-check
    • Quellfilter: IPv4-Bereiche.
    • IPv4-Quellbereiche: 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 primäres 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 Passthrough-Network Load Balancer liefern Pakete aus und behalten dabei die Ziel-IP 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 Passthrough-Network Load Balancer an eine Backend-VM liefert, ist die interne IP-Adresse der Weiterleitungsregel.

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

Console

Backend-VMs erstellen

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Wiederholen Sie die nachstehenden Schritte, um vier VMs mit den folgenden Namen- und Zonenkombinationen 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 Erweiterte Optionen.

  8. Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:

    1. Geben Sie für Netzwerk-Tags allow-health-check und allow-ssh ein.
    2. Wählen Sie für Netzwerkschnittstellen Folgendes aus:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
  9. Klicken Sie auf Verwaltung. Fügen Sie im Feld Startskript das nachfolgende Skript 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://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  10. Klicken Sie auf Erstellen.

Instanzgruppen erstellen

  1. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den 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-12 \
        --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://metadata.google.internal/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

Ersetzen Sie dabei Folgendes:

  • 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-12"
    

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://metadata.google.internal/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.

    Zu 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 Erweiterte Optionen.

  6. Klicken Sie auf Netzwerk und konfigurieren Sie die folgenden Felder:

    1. Geben Sie bei Netzwerk-Tags den Wert allow-ssh ein.
    2. Wählen Sie für Netzwerkschnittstellen Folgendes aus:
      • Netzwerk: lb-network
      • Subnetz: lb-subnet
  7. 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-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

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

Ersetzen Sie dabei Folgendes:

  • 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-12"
    

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 Passthrough-Network Load Balancer. Zuerst konfigurieren Sie die Systemdiagnose und den Backend-Dienst und danach die Frontend-Komponenten:

  • Systemdiagnose: Dieses Beispiel verwendet eine HTTP-Systemdiagnose, die nur auf die HTTP-Antwort 200 (OK) prüft. Weitere Informationen finden Sie im Abschnitt "Systemdiagnose" der Übersicht über den internen Passthrough-Network Load Balancer.

  • Backend-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 Backend-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

Konfiguration starten

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load Balancing aufrufen

  2. Klicken Sie auf Load-Balancer erstellen.
  3. Wählen Sie unter Typ des Load Balancers die Option Network Load Balancer (TCP/UDP/SSL) aus und klicken Sie auf Weiter.
  4. Wählen Sie für Proxy oder Passthrough die Option Passthrough-Load Balancer aus und klicken Sie auf Weiter.
  5. Wählen Sie für Öffentlich oder intern die Option Intern aus und klicken Sie auf Weiter.
  6. Klicken Sie auf Konfigurieren.

Grundlegende Konfiguration

  1. Legen Sie als Name be-ilb fest.
  2. Legen Sie Region auf us-west1 fest.
  3. Legen Sie für Netzwerk lb-network fest.
  4. Click Backend configuration and make the following changes:
    1. 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.
    2. Klicken Sie auf Backend 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.
    3. 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 Google 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.
    4. Klicken Sie auf Erweiterte Konfigurationen. Konfigurieren Sie im Abschnitt Failover-Richtlinie Folgendes:
      • Failover-Quote: 0.75
      • Aktivieren Sie Verbindungsausgleich bei Failover aktivieren.
    5. Ü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.
  5. Klicken Sie auf Frontend-Konfiguration. In the New Frontend IP and port section, make the following changes:
    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 Frontend-Konfiguration ein blaues Häkchen befindet. Gehen Sie diesen Schritt noch einmal durch, wenn nicht.
  6. Klicken Sie auf Prüfen und abschließen. Kontrollieren Sie die Einstellungen.
  7. 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 Backend-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 dabei 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 Backend-Dienst. Stellen Sie dazu eine POST-Anfrage an die Methode regionBackendServices.insert. Ersetzen Sie dabei 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 dabei 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"
}

Tests

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 internen Passthrough-Network Load Balancer mit mehreren Zonen.
Failover für internen Passthrough-Network Load Balancer mit mehreren Zonen (zum Vergrößern klicken)

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

Backend-VMs erstellen

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Wiederholen Sie die nachstehenden Schritte, um vier VMs mit den folgenden Namen- und Zonenkombinationen 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 Erweiterte Optionen 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://metadata.google.internal/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. Rufen Sie in der Google Cloud Console die Seite Instanzgruppen auf.

    Zu den 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-12 \
        --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://metadata.google.internal/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

Ersetzen Sie dabei Folgendes:

  • 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-12"
    

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://metadata.google.internal/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 dabei 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 dabei 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 Backend hinzufügen

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

Console

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load-Balancing aufrufen

  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 Backend zu einem vorhandenen internen Passthrough-Network Load Balancer-Backend-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

Ersetzen Sie dabei Folgendes:

  • 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"
    }
  ]
}

Ersetzen Sie dabei Folgendes:

  • 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-Backend hinzufügen

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

Console

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load-Balancing aufrufen

  2. Klicken Sie auf dem Tab Load-Balancer auf den Namen eines vorhandenen Load-Balancers vom Typ TCP/UDP (intern) (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-Backend zu einem vorhandenen internen Passthrough-Network Load Balancer-Backend-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

Ersetzen Sie dabei Folgendes:

  • 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"
    }
  ]
}

Ersetzen Sie dabei Folgendes:

  • 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 Backend in ein Failover-Backend konvertieren oder umgekehrt, ohne die Instanzgruppe aus dem Backend-Dienst des internen Passthrough-Network Load Balancer zu entfernen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load-Balancing aufrufen

  2. Klicken Sie auf dem Tab Load Balancer auf den Namen eines vorhandenen Load Balancers vom Typ TCP/UDP (intern).

  3. Klicken Sie auf Bearbeiten .

  4. Klicken Sie im Menü Backend-Konfiguration auf den Namen einer der Backend-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

Ersetzen Sie dabei Folgendes:

  • 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"
    }
  ],
}

Ersetzen Sie dabei Folgendes:

  • 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 Backend-Dienst eines internen Passthrough-Network Load Balancers verwalten. Eine Failover-Richtlinie enthält die folgenden Parameter:

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

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

Failover-Richtlinie definieren

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

Console

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

  1. Rufen Sie in der Google Cloud Console die Seite Load-Balancing auf.

    Load-Balancing aufrufen

  2. Klicken Sie auf dem Tab Load Balancer auf den Namen eines vorhandenen Load Balancers vom Typ TCP/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

Aktualisieren Sie den Backend-Dienst des Load-Balancers, um eine Failover-Richtlinie mit der gcloud CLI zu definieren:

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

Ersetzen Sie dabei Folgendes:

  • 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]
  }
}

Ersetzen Sie dabei Folgendes:

  • 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 Passthrough-Network Load Balancer aufrufen.

Console

In der Google Cloud Console werden die vorhandenen Einstellungen für Failover-Richtlinien angezeigt, wenn Sie einen internen Passthrough-Network 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 der gcloud CLI 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)"

Ersetzen Sie dabei Folgendes:

  • 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

Ersetzen Sie dabei Folgendes:

  • 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