Gewichtetes Load Balancing konfigurieren

In dieser Anleitung wird das Erstellen einer gewichteten externen Passthrough-Network Load Balancer-Bereitstellung für die einzelnen VM-Instanzen unter Verwendung eines regionalen Backend-Dienstes erläutert.

In dieser Anleitung erstellen Sie eine Instanzgruppe mit drei VM-Instanzen und weisen jeder Instanz eine Gewichtung zu. Sie erstellen eine HTTP-Systemdiagnose, um die Gewichtungen von Backend-Instanzen zu melden. Das gewichtete Load Balancing ist für den Backend-Dienst mit der Ort-Load Balancer-Richtlinie als WEIGHTED_MAGLEV aktiviert.

Hinweise

VPC-Netzwerk, Subnetze und Firewallregeln erstellen

Erstellen Sie ein VPC-Netzwerk, ein Subnetz und Firewallregeln zum Zulassen von eingehendem Traffic, um Verbindungen zu den Backend-VMs Ihres Load Balancers zuzulassen.

  1. Erstellen Sie ein VPC-Netzwerk und ein Subnetz:

    a. Führen Sie den folgenden gcloud compute networks create Befehl aus, um das VPC-Netzwerk zu erstellen:

    gcloud compute networks create NETWORK_NAME --subnet-mode custom
    

    b. In diesem Beispiel lautet der primäre IPv4-Adressbereich des Subnetzes 10.10.0.0/24. Führen Sie den gcloud compute networks subnets create-Befehl aus, um das Subnetz zu erstellen:

    gcloud compute networks subnets create SUBNET_NAME \
      --network=NETWORK_NAME \
      --range=10.10.0.0/24 \
      --region=us-central1
    

    Dabei gilt:

    • NETWORK_NAME ist der Name des zu erstellenden VPC-Netzwerks.
    • SUBNET_NAME ist der Name des zu erstellenden Subnetzwerks.
  2. Erstellen Sie eine Firewallregel für eingehenden Traffic, damit an die TCP-Ports 80 und 443 gesendete Pakete an die Backend-VMs zugestellt werden können. In diesem Beispiel lässt die Firewallregel Verbindungen von jeder Quell-IP-Adresse zu. Die Firewallregel gilt für VMs mit dem Netzwerk-Tag network-lb-tag.

    Führen Sie den gcloud compute firewall-rules create-Befehl aus, um die Firewallregel zu erstellen:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
       --direction=INGRESS \
       --priority=1000 \
       --network=NETWORK_NAME \
       --action=ALLOW \
       --rules=tcp:80,tcp:443 \
       --source-ranges=0.0.0.0/0 \
       --target-tags=network-lb-tag
    

    Ersetzen Sie FIREWALL_RULE_NAME durch den Namen der zu erstellenden Firewallregel.

VM-Instanzen erstellen und Gewichtungen zuweisen

Erstellen Sie drei VM-Instanzen und weisen Sie Gewichtungen zu:

  1. Konfigurieren Sie drei Backend-VM-Instanzen so, dass Gewichtungen im X-Load-Balancing-Endpoint-Weight-Header mit HTTP-Antworten zurückgegeben werden. In dieser Anleitung konfigurieren Sie eine Backend-Instanz zur Meldung einer Gewichtung von null, eine zweite Backend-Instanz zur Meldung einer Gewichtung von 100, und eine dritte Backend-Instanz zur Meldung einer Gewichtung von 900.

    Führen Sie den gcloud compute instances create-Befehl aus, um die Instanzen zu erstellen:

    gcloud compute instances create instance-0 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=0,startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
      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
      lb_weight="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
      echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
      tee /etc/apache2/conf-enabled/headers.conf
      systemctl restart apache2'
    
    gcloud compute instances create instance-100 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=100,startup-script='#! /bin/bash
      apt-get update
      apt-get install apache2 -y
      ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
      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
      lb_weight="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
      echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
      tee /etc/apache2/conf-enabled/headers.conf
      systemctl restart apache2'
    
    gcloud compute instances create instance-900 \
      --zone=us-central1-a \
      --tags=network-lb-tag \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --subnet=SUBNET_NAME \
      --metadata=load-balancing-weight=900,startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
        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
        lb_weight="$(curl -H "Metadata-Flavor:Google" \
        http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)"
        echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \
        tee /etc/apache2/conf-enabled/headers.conf
        systemctl restart apache2'
    

Instanzgruppe erstellen

In dieser Anleitung geben Sie Anweisungen zum Erstellen einer nicht verwalteten Instanzgruppe, die alle drei VM-Instanzen umfasst (instance-0, instance-100 und instance-900).

  • Führen Sie den gcloud compute instance-groups unmanaged create-Befehl aus, um die Instanzgruppe zu erstellen:

    gcloud compute instance-groups unmanaged create INSTANCE_GROUP \     
      --zone=us-central1-a
    
    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \
      --zone=us-central1-a \
      --instances=instance-0,instance-100,instance-900
    

    Ersetzen Sie INSTANCE_GROUP durch den Namen der zu erstellenden Instanzgruppe.

Erstellen einer HTTP-Systemdiagnose

In dieser Anleitung geben Sie Anweisungen zum Erstellen einer HTTP-Systemdiagnose, um die HTTP-Antwort mit der Gewichtung der Backend-VM zu lesen.

  • Führen Sie zum Erstellen der HTTP-Systemdiagnose den gcloud compute health-checks create-Befehl aus:

    gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
      --region=us-central1
    

    Ersetzen Sie HTTP_HEALTH_CHECK_NAME durch den Namen der zu erstellenden HTTP-Systemdiagnose.

Backend-Dienst erstellen

Das folgende Beispiel enthält Anweisungen zum Erstellen eines regionalen externen Backend-Dienstes, der für die Verwendung des gewichteten Load-Balancings konfiguriert ist.

  1. Erstellen Sie einen Backend-Dienst mit der HTTP-Systemdiagnose und legen Sie die Load-Balancer-Richtlinie für Standorte auf WEIGHTED_MAGLEV fest.

    • Führen Sie den gcloud compute backend-services create-Befehl aus, um den Backend-Dienst zu erstellen:

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=external \
        --protocol=tcp \
        --region=us-central1 \
        --health-checks=HTTP_HEALTH_CHECK_NAME \
        --health-checks-region=us-central1 \
        --locality-lb-policy=WEIGHTED_MAGLEV
      

      Ersetzen Sie BACKEND_SERVICE_NAME durch den Namen des zu erstellenden Backend-Dienstes.

  2. Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:

    • Führen Sie den gcloud compute backend-services add-backend-Befehl aus, um die Instanzgruppe hinzuzufügen:

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --instance-group=INSTANCE_GROUP \
        --instance-group-zone=us-central1-a \
        --region=us-central1
      
  3. Reservieren Sie eine regionale externe IP-Adresse für den Load Balancer.

    • Führen Sie den gcloud compute addresses create-Befehl aus, um eine oder mehrere IP-Adressen zu reservieren:

      gcloud compute addresses create ADDRESS_NAME \
       --region us-central1
      

      Ersetzen Sie ADDRESS_NAME durch den Namen der zu erstellenden IP-Adresse.

      Verwenden Sie den compute addresses describe-Befehl, um das Ergebnis anzeigen zu lassen: Notieren Sie sich die reservierte statische externe IP-Adresse (IP_ADDRESS).

      gcloud compute addresses describe ADDRESS_NAME
      
  4. Erstellen Sie eine Weiterleitungsregel mithilfe der reservierten regionalen externen IP-Adresse IP_ADDRESS. Verbinden Sie die Weiterleitungsregel mit dem Backend-Dienst.

    • Führen Sie den gcloud compute forwarding-rules create-Befehl aus, um die Weiterleitungsregel zu erstellen:

      gcloud compute forwarding-rules create FORWARDING_RULE \
        --region=us-central1 \
        --ports=80 \
        --address=IP_ADDRESS \
        --backend-service=BACKEND_SERVICE_NAME
      

      Dabei gilt:

      FORWARDING_RULE ist der Name der zu erstellenden Weiterleitungsregel.

      IP_ADDRESS ist die IP-Adresse, die der Instanz zugewiesen werden soll. Verwenden Sie die reservierte statische externe IP-Adresse, nicht den Adressnamen.

Backend-Gewichtungen mit der Backend-Dienst-API prüfen

Prüfen Sie, ob die Backend-Gewichtungen ordnungsgemäß an die HTTP-Systemdiagnose gemeldet werden.

  • Führen Sie den gcloud compute backend-services get-health-Befehl aus, um Backend-Gewichtungen (zusammen mit Systemstatuswerten) von einem Backend-Dienst abzurufen:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region=us-central1
    

Die Ausgabe sieht so aus:

backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name}
status:
  healthStatus:
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0
    ipAddress: 10.10.0.5
    port: 80
    weight: '0'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100
    ipAddress: 10.10.0.6
    port: 80
    weight: '100'
  - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name}
    forwardingRuleIp: 34.135.46.66
    healthState: HEALTHY
    instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900
    ipAddress: 10.10.0.7
    port: 80
    weight: '900'
  kind: compute#backendServiceGroupHealth