1. Einführung
Sie können einen Netzwerk-Load-Balancer so konfigurieren, dass der Traffic auf den Backend-Instanzen des Load-Balancers basierend auf den von einer HTTP-Systemdiagnose gemeldeten Gewichtungen mit gewichtetem Load-Balancing verteilt wird.
Für das gewichtete Load-Balancing müssen Sie Folgendes konfigurieren:
- Sie müssen die Load-Balancer-Richtlinie für Standorte (localityLbPolicy) des Backend-Dienstes auf WEIGHTED_MAGLEV festlegen.
- Sie müssen den Backend-Dienst mit einer HTTP-, HTTP2- oder HTTPS-Systemdiagnose konfigurieren. Die Antworten der HTTP-Systemdiagnose müssen das benutzerdefinierte Feld des HTTP-Antwortheaders X-Load-Balancing-Endpoint-Weight enthalten, um die Gewichtungen mit ganzzahligen Werten von 0 bis 1000 in Dezimaldarstellung für jede Backend-Instanz anzugeben.
Wenn Sie dieselbe Instanzgruppe als Backend für mehrere Backend-Dienst-basierte Netzwerk-Load-Balancer mit gewichtetem Load-Balancing verwenden, wird empfohlen, für jede Systemdiagnose des Backend-Dienstes einen eindeutigen Anfragepfad zu verwenden. Weitere Informationen finden Sie unter Erfolgskriterien für HTTP-, HTTPS- und HTTP/2-Systemdiagnosen.
Die HTTP-Systemdiagnose sollte eine HTTP 200 (OK)-Antwort zurückgeben, damit die Systemdiagnosen bestanden werden und die Backend-Instanz als fehlerfrei gilt. Wenn alle Backend-Instanzen ihre Systemdiagnosen bestehen und X-Load-Balancing-Endpoint-Weight mit einer Gewichtung von null zurückgeben, verteilt der Load-Balancer neue Verbindungen zwischen den fehlerfreien Backends und behandelt sie mit gleicher Gewichtung. Der Load-Balancer kann neue Verbindungen auch zwischen fehlerhaften Backends verteilen. Weitere Informationen finden Sie unter Trafficverteilung.
Beispiele für das gewichtete Load-Balancing finden Sie unter Backend-Auswahl und Verbindungs-Tracking.
Das gewichtete Load-Balancing kann in den folgenden Szenarien verwendet werden:
- Wenn einige Verbindungen mehr Daten verarbeiten als andere oder einige Verbindungen länger bestehen als andere, kann die Backend-Lastverteilung ungleichmäßig werden. Durch die Signalisierung einer niedrigeren Gewichtung pro Instanz kann eine Instanz mit hoher Auslastung den Anteil der neuen Verbindungen verringern und gleichzeitig die bestehenden Verbindungen bedienen.
- Wenn ein Backend überlastet ist und die Zuweisung weiterer Verbindungen zum Bruch bestehender Verbindungen führen kann, können solche Verbindungen sich selbst eine Gewichtung von null zuordnen. Durch die Meldung einer Gewichtung von null nimmt eine Backend-Instanz keine neuen Verbindungen mehr an, verarbeitet jedoch weiterhin vorhandene Verbindungen.
- Wenn ein Backend vorhandene Verbindungen vor der Wartung schnell bearbeitet, weist es sich selbst eine Gewichtung von null zu. Durch die Meldung einer Gewichtung von null nimmt eine Backend-Instanz keine neuen Verbindungen mehr an, verarbeitet jedoch weiterhin vorhandene Verbindungen.
Lerninhalte
- Konfigurieren eines Netzwerk-Load-Balancers, um den Traffic auf den Backend-Instanzen des Load-Balancers basierend auf den von einer HTTP-Systemdiagnose gemeldeten Gewichtungen mit gewichtetem Load-Balancing zu verteilen.
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Er ist ein String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (sie kann nach dem Festlegen nicht mehr geändert werden). Die Cloud Console generiert automatisch einen eindeutigen String. In der Regel ist es nicht wichtig, wie er aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie eine eigene ID verwenden und prüfen, ob sie verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Es gibt noch einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/APIs zu verwenden. Die Durchführung dieses Codelabs sollte nicht viel kosten, wenn überhaupt. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach dieser Anleitung keine Kosten entstehen, können Sie die erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testprogramm im Wert von 300$ teilnehmen.
Cloud Shell starten
Google Cloud kann zwar von Ihrem Laptop aus per Fernzugriff genutzt werden, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der Google Cloud Console in der Symbolleiste rechts oben auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Wenn der Vorgang abgeschlossen ist, sollte etwa Folgendes angezeigt werden:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.
2. Konfiguration starten
Für das Codelab ist ein einzelnes Projekt erforderlich.
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 der Backend-Instanzen zu melden. Der gewichtete Netzwerk-Load-Balancer ist für den Backend-Dienst mit der Load-Balancer-Richtlinie für Standorte WEIGHTED_MAGLEV aktiviert.
Hinweis
- Lesen Sie die Back-End-Dienst-basierte externe Netzwerk-Load-Balancing-Übersicht.
- Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie im Leitfaden zur gcloud CLI. Befehle für das Load-Balancing finden Sie in der Referenz für die API und gcloud CLI. Wenn Sie die Google Cloud CLI noch nicht ausgeführt haben, führen Sie zuerst gcloud init zur Authentifizierung aus.
- Aktivieren Sie die Compute API.
gcloud services enable compute.googleapis.com
Hinweis:Sie können die Google Cloud Console nicht verwenden, um die Load-Balancer-Richtlinie für Standorte zu konfigurieren und VM-Instanzen Gewichtungen zuzuweisen. Verwenden Sie stattdessen die Google Cloud CLI.
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.
- Erstellen Sie ein VPC-Netzwerk und ein Subnetz. a. Führen Sie den
gcloud compute networks createBefehl:aus, um das VPC-Netzwerk zu erstellen
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. In diesem Beispiel ist 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
Ersetzen Sie Folgendes:
NETWORK_NAME: der Name des zu erstellenden VPC-Netzwerks.SUBNET_NAME: der Name des zu erstellenden Subnetzwerks.
- 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 Befehlgcloud compute firewall-rules createaus, 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 ihnen Gewichtungen zu:
- Konfigurieren Sie drei Backend-VM-Instanzen so, dass Gewichtungen im Header X-Load-Balancing-Endpoint-Weight 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 Befehl
gcloud compute instances createaus, um die Instanzen zu erstellen:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --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-10 \ --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-10 \
--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, and instance-900).
- Führen Sie den
gcloud compute instance-groups unmanaged createBefehl 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.
HTTP-Systemdiagnose erstellen
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 den Befehl
gcloud compute health-checks createaus, um die HTTP-Systemdiagnose zu erstellen:
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.
- 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 Befehl
gcloud compute backend-services createaus, 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_NAMEdurch den Namen des zu erstellenden Backend-Dienstes.
- Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:
- Führen Sie den Befehl
gcloud compute backend-services add-backendaus, 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
- Reservieren Sie eine regionale externe IP-Adresse für den Load-Balancer.
- Führen Sie den Befehl
gcloud compute addresses createaus, 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 anzuzeigen. Notieren Sie sich die reservierte statische externe IP-Adresse (IP_ADDRESS').
gcloud compute addresses describe ADDRESS_NAME
- Erstellen Sie eine Weiterleitungsregel mit der reservierten regionalen externen IP-Adresse `IP_ADDRESS`. Verbinden Sie die Weiterleitungsregel mit dem Backend-Dienst.
- Führen Sie den
gcloud compute forwarding-rules createBefehl 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
- Ersetzen Sie Folgendes:
FORWARDING_RULE: der Name der zu erstellenden Weiterleitungsregel.IP_ADDRESS: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 Befehl
gcloud compute backend-services get-healthaus, um Backend-Gewichtungen (zusammen mit Systemstatuswerten) von einem Backend-Dienst abzurufen:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Die Ausgabe sollte so aussehen:
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