1. Einführung
Sie können einen Netzwerk-Load-Balancer so konfigurieren, dass der Traffic basierend auf den Gewichtungen, die von einer HTTP-Systemdiagnose mit gewichtetem Load-Balancing gemeldet werden, auf die Back-End-Instanzen des Load-Balancers verteilt.
Für das gewichtete Load Balancing müssen Sie Folgendes konfigurieren:
- Sie müssen die Load-Balancer-Richtlinie für den Ort (localityLbPolicy) des Back-End-Dienstes auf WEIGHTED_MAGLEV festlegen.
- Sie müssen den Back-End-Dienst mit einer HTTP-/HTTP2-/HTTPS-Systemdiagnose konfigurieren. Die Antworten der HTTP-Systemdiagnose müssen ein benutzerdefiniertes HTTP-Antwortheaderfeld "X-Load-Balancing-Endpoint-Weight" enthalten, um die Gewichtungen mit ganzzahligen Werten zwischen 0 und 1000 in dezimaler Darstellung für jede Back-End-Instanz anzugeben.
Wenn Sie dieselbe Instanzgruppe als Back-End für mehrere Back-End-Dienst-basierte Netzwerk-Load-Balancer mit gewichtetem Load-Balancing verwenden, empfiehlt es sich, für jede Systemdiagnose des Back-End-Dienstes einen eindeutigen Anfragepfad zu verwenden. Weitere Informationen finden Sie unter Erfolgskriterien für HTTP-, HTTPS- und HTTP/2-Systemdiagnosen.
Die HTTP-Systemdiagnose sollte den HTTP-Statuscode 200 (OK) zurückgeben, damit die Systemdiagnosen erfolgreich sind und die Back-End-Instanz als fehlerfrei gilt. In Situationen, in denen alle Back-End-Instanzen ihre Systemdiagnosen bestehen und X-Load-Balancing-Endpoint-Weight mit Nullgewichtung zurückgeben, verteilt der Load-Balancer neue Verbindungen zwischen den fehlerfreien Back-Ends und behandelt sie mit der gleichen Gewichtung. Der Load-Balancer kann auch neue Verbindungen zwischen fehlerhaften Back-Ends verteilen. Weitere Informationen finden Sie unter Traffic-Verteilung.
Beispiele für gewichtetes Load-Balancing finden Sie unter Back-End-Auswahl und Verbindungstracking.
Das gewichtete Load Balancing kann in den folgenden Szenarien verwendet werden:
- Wenn einige Verbindungen mehr Daten verarbeiten als andere oder einige Verbindungen länger leben als andere, kann die Back-End-Lastverteilung ungleichmäßig werden. Durch das Signalisieren einer geringeren Gewichtung pro Instanz kann eine Instanz mit hoher Last ihren Anteil an neuen Verbindungen reduzieren und gleichzeitig bestehende Verbindungen weiter bedienen.
- Wenn ein Back-End überlastet ist und weitere Verbindungen zugewiesen werden, könnten die bestehenden Verbindungen unterbrochen werden. In diesem Fall weisen diese Back-Ends sich selbst eine Gewichtung von Null zu. Durch das Signalisieren von Null-Gewichtung stellt eine Back-End-Instanz die Bereitstellung neuer Verbindungen ein, verarbeitet jedoch weiterhin bestehende.
- Wenn ein Back-End bestehende Verbindungen vor der Wartung entlastet, weist es sich selbst eine Gewichtung von null zu. Durch das Signalisieren von Null-Gewichtung stellt die Back-End-Instanz keine neuen Verbindungen mehr bereit, verarbeitet jedoch weiterhin bestehende.
Aufgaben in diesem Lab
- Netzwerk-Load-Balancer konfigurieren, um Traffic basierend auf den Gewichtungen, die von einer HTTP-Systemdiagnose mit gewichtetem Load-Balancing gemeldet werden, auf die Back-End-Instanzen des Load-Balancers zu verteilen.
Umgebung für das selbstbestimmte Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie 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. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
Cloud Shell starten
Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, 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 rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:
Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Alle Arbeiten in diesem Codelab können in einem Browser erledigt werden. Sie müssen nichts installieren.
2. Konfiguration starten
Für Codelab ist ein einzelnes Projekt erforderlich.
In dieser Anleitung erstellen Sie eine Instanzgruppe mit drei VM-Instanzen und weisen jeder Instanz Gewichtungen zu. Sie erstellen eine HTTP-Systemdiagnose, um Back-End-Instanzgewichtungen zu melden. Der gewichtete Netzwerk-Load-Balancer ist im Back-End-Dienst mit der Ort-Load-Balancer-Richtlinie als WEIGHTED_MAGLEV aktiviert.
Hinweis
- Übersicht über das auf Back-End-Diensten basierende externe Netzwerk-Load-Balancing
- Installieren Sie die Google Cloud CLI. Eine vollständige Übersicht über das Tool finden Sie in der Übersicht über die gcloud CLI. Die Befehle für das Load-Balancing finden Sie in der Referenz zu API und gcloud CLI. Wenn Sie die Google Cloud CLI noch nicht verwendet haben, führen Sie zur Authentifizierung zuerst gcloud init aus.
- Aktivieren Sie die Compute API.
gcloud services enable compute.googleapis.com
Hinweis:Mit der Google Cloud Console können Sie die Ort-Load-Balancer-Richtlinie nicht konfigurieren und VM-Instanzen Gewichtungen zuweisen. Verwenden Sie stattdessen die Google Cloud CLI.
VPC-Netzwerk, Subnetze und Firewallregeln erstellen
Erstellen Sie ein VPC-Netzwerk, ein Subnetz und Firewallregeln für eingehenden Traffic, um Verbindungen zu den Back-End-VMs Ihres Load-Balancers zuzulassen.
- Erstellen Sie ein VPC-Netzwerk und ein Subnetz. a) Führen Sie den Befehl
gcloud compute networks create
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 Befehl gcloud compute networks subnets create
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 VPC-Netzwerks, das erstellt werden soll.SUBNET_NAME
ist der Name des zu erstellenden Subnetzwerks.
- Erstellen Sie eine Firewall-Zulassungsregel für eingehenden Traffic, damit an die Ziel-TCP-Ports 80 und 443 gesendete Pakete an die Back-End-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 create
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:
- Konfigurieren Sie drei Back-End-VM-Instanzen so, dass die Gewichtungen im Header X-Load-Balancing-Endpoint-Weight mit HTTP-Antworten zurückgegeben werden. Für diese Anleitung konfigurieren Sie eine Backend-Instanz so, dass sie eine Gewichtung von null meldet, eine zweite Backend-Instanz eine Gewichtung von 100 und eine dritte Backend-Instanz eine Gewichtung von 900. Führen Sie zum Erstellen der Instanzen den Befehl
gcloud compute instances create
aus:
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 erfahren Sie, wie Sie eine nicht verwaltete Instanzgruppe erstellen, die alle drei VM-Instanzen(instance-0, instance-100, and instance-900
) enthält.
- Führen Sie den Befehl
gcloud compute instance-groups unmanaged create
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 erstellen Sie eine HTTP-Systemdiagnose, um die HTTP-Antwort mit der Gewichtung der Back-End-VM zu lesen.
- Führen Sie den Befehl
gcloud compute health-checks create
aus, 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.
Back-End-Dienst erstellen
Das folgende Beispiel enthält eine Anleitung zum Erstellen eines regionalen externen Back-End-Dienstes, der für die Verwendung von gewichtetem Load-Balancing konfiguriert ist.
- Erstellen Sie einen Back-End-Dienst mit der HTTP-Systemdiagnose und legen Sie die Load-Balancer-Richtlinie für den Ort auf WEIGHTED_MAGLEV fest.
- Führen Sie den Befehl
gcloud compute backend-services create
aus, um den Back-End-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 Back-End-Dienstes.
- Fügen Sie die Instanzgruppe dem Backend-Dienst hinzu:
- Führen Sie den Befehl
gcloud compute backend-services add-backend
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
- Reservieren Sie eine regionale externe IP-Adresse für den Load-Balancer.
- Führen Sie den Befehl
gcloud compute addresses create
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 Befehl compute addresses describe
, um das Ergebnis aufzurufen. 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 Back-End-Dienst.
- Führen Sie den Befehl
gcloud compute forwarding-rules create
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
FORWARDING_RULE
durch den Namen 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.
Back-End-Gewichtungen mit der Back-End-Dienst-API überprüfen
Prüfen Sie, ob die Back-End-Gewichtungen ordnungsgemäß an die HTTP-Systemdiagnose gemeldet werden.
- Führen Sie den Befehl
gcloud compute backend-services get-health
aus, um Back-End-Gewichtungen (zusammen mit den Systemstatus) von einem Back-End-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