Codelab zu erweiterten Load-Balancing-Optimierungen

1. Einführung

Willkommen im Codelab zu erweiterten Load Balancing-Optimierungen.

In diesem Codelab erfahren Sie, wie Sie erweiterte Load Balancing-Optionen für den globalen externen Application Load Balancer konfigurieren. Bevor Sie beginnen, sollten Sie sich das Dokument zum Cloud-Load Balancing ansehen ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

c3fb1d3f027e8640.png

Abbildung 1. Der Workflow zum Auswählen eines Zielendpunkts mit dem globalen externen Application Load Balancer.

Codelab-Topologie und Anwendungsfälle

2f7368df335d3de9.png

Abbildung 2. Routingtopologie des HTTP-Load Balancers

In diesem Codelab richten Sie zwei verwaltete Instanzgruppen ein. Sie erstellen einen globalen externen HTTPS-Load Balancer. Der Load-Balancer nutzt mehrere Features aus der Liste der erweiterten Funktionen, die der Envoy-basierte Load-Balancer unterstützt. Nach der Bereitstellung generieren Sie eine simulierte Last und prüfen, ob die von Ihnen festgelegten Konfigurationen ordnungsgemäß funktionieren.

Aufgaben in diesem Lab

  • So konfigurieren Sie die ServiceLbPolicy, um den Load Balancer zu optimieren.

Voraussetzungen

2. Hinweis

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

APIs aktivieren

Alle erforderlichen Dienste aktivieren

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com
gcloud services enable networkservices.googleapis.com

3. VPC‑Netzwerk erstellen

VPC-Netzwerk erstellen

Über Cloud Shell

gcloud compute networks create httplbs --subnet-mode=auto

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
httplbs  AUTO         REGIONAL

VPC-Firewallregeln erstellen

Nachdem Sie die VPC erstellt haben, erstellen Sie jetzt eine Firewallregel. Die Firewallregel wird verwendet, um allen IP-Adressen den Zugriff auf die externe IP-Adresse der Website der Testanwendung über Port 80 für HTTP-Traffic zu ermöglichen.

Über Cloud Shell

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

Ausgabe

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
httplb-allow-http-rule  httplbs  INGRESS    700       tcp:80        False

In diesem Codelab optimieren wir den Status der VMs. Daher erstellen wir auch Firewallregeln, um SSH zuzulassen.

Über Cloud Shell

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

Ausgabe

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh].
Creating firewall...done.
NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

4. Verwaltete Instanzgruppen einrichten

Sie müssen verwaltete Instanzgruppen einrichten, die die Muster für Backendressourcen enthalten, die vom HTTP-Load Balancer verwendet werden. Zuerst erstellen wir Instanzvorlagen, in denen die Konfiguration der VMs definiert wird, die für die einzelnen Regionen erstellt werden sollen. Als Nächstes erstellen wir für ein Backend in jeder Region eine verwaltete Instanzgruppe, die auf eine Instanzvorlage verweist.

Verwaltete Instanzgruppen können zonal oder regional sein. In dieser Lab-Übung erstellen wir zonale verwaltete Instanzgruppen.

In diesem Abschnitt sehen Sie ein vorab erstelltes Startskript, auf das bei der Instanzerstellung verwiesen wird. Dieses Startskript installiert und aktiviert Webserverfunktionen, mit denen wir eine Webanwendung simulieren. Sie können sich das Script ansehen.

Instanzvorlagen erstellen

Der erste Schritt besteht darin, eine Instanzvorlage zu erstellen.

Über Cloud Shell

gcloud compute instance-templates create test-template \
   --network=httplbs \
   --tags=allow-ssh,http-server \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

Ausgabe

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

Sie können jetzt mit dem folgenden gcloud-Befehl prüfen, ob unsere Instanzvorlagen erfolgreich erstellt wurden:

Über Cloud Shell

gcloud compute instance-templates list

Ausgabe

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

Instanzgruppen erstellen

Wir müssen jetzt eine verwaltete Instanzgruppe aus den zuvor erstellten Instanzvorlagen erstellen.

Aus Cloud Shell

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-a-mig  us-east1-a  zone   us-east1-a-mig       0     1            test-template      no

Über Cloud Shell

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig].
NAME            LOCATION    SCOPE  BASE_INSTANCE_NAME   SIZE  TARGET_SIZE  INSTANCE_TEMPLATE  AUTOSCALED
us-east1-b-mig  us-east1-b  zone   us-east1-b-mig       0     5            test-template      no

Mit dem folgenden gcloud-Befehl können wir prüfen, ob unsere Instanzgruppen erfolgreich erstellt wurden:

Über Cloud Shell

gcloud compute instance-groups list

Ausgabe

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-east1-a-mig        us-east1-a    zone    httplbs          Yes      1
us-east1-b-mig        us-east1-b    zone    httplbs          Yes      5

Webserver-Funktionalität prüfen

Jede Instanz ist so konfiguriert, dass ein Apache-Webserver mit einem einfachen PHP-Skript ausgeführt wird, das ungefähr so aussieht:

Seite bereitgestellt von: us-east1-a-mig-ww2h

Rufen Sie „Compute Engine“ -> „VM-Instanzen“ auf, um zu prüfen, ob Ihre Webserver ordnungsgemäß funktionieren. Achten Sie darauf, dass Ihre neuen Instanzen (z.B. us-east1-a-mig-xxx) entsprechend ihren Instanzgruppendefinitionen erstellt wurden.

Stellen Sie jetzt eine Webanfrage in Ihrem Browser, um sicherzustellen, dass der Webserver läuft. Das Starten kann eine Minute dauern. Wählen Sie auf der Seite „VM-Instanzen“ unter „Compute Engine“ eine Instanz aus, die von Ihrer Instanzgruppe erstellt wurde, und klicken Sie auf die externe (öffentliche) IP-Adresse.

Alternativ können Sie auch http://<IP_Address> in Ihrem Browser aufrufen.

5. Load-Balancer einrichten

Systemdiagnose erstellen

Zuerst müssen wir eine grundlegende Systemdiagnose erstellen, um sicherzustellen, dass unsere Dienste ordnungsgemäß funktionieren. Wir erstellen eine einfache Systemdiagnose. Es sind noch viele weitere Anpassungen verfügbar.

Über Cloud Shell

gcloud compute health-checks create http http-basic-check \
    --port 80

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

Externe IP-Adresse reservieren

Für diesen Schritt müssen Sie eine global verfügbare statische IP-Adresse reservieren, die später mit dem Load Balancer verknüpft wird.

Aus Cloud Shell

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

Notieren Sie sich die reservierte IP-Adresse.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

Backend-Dienste erstellen

Jetzt müssen wir einen Back-End-Dienst für die zuvor erstellten verwalteten Instanzgruppen erstellen.

Über Cloud Shell

gcloud compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

Backend-Diensten MIGs hinzufügen

Nachdem wir die Back-End-Dienste erstellt haben, müssen wir jedem Back-End-Dienst die zuvor erstellten verwalteten Instanzgruppen hinzufügen.

Über Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

Aus Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

Mit dem folgenden Befehl können Sie prüfen, ob die Backends hinzugefügt wurden.

Aus Cloud Shell

gcloud compute backend-services list

Ausgabe

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

URL-Zuordnung erstellen

Jetzt erstellen wir eine URL-Zuordnung.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http].
NAME          DEFAULT_SERVICE
web-map-http  backendServices/east-backend-service

HTTP-Frontend erstellen

Der letzte Schritt beim Erstellen des Load Balancers besteht darin, das Frontend zu erstellen. Dadurch wird die zuvor reservierte IP-Adresse der von Ihnen erstellten Load Balancer-URL-Zuordnung zugeordnet.

Über Cloud Shell

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv].
NAME               URL_MAP
http-lb-proxy-adv  web-map-http

Als Nächstes müssen Sie eine globale Weiterleitungsregel erstellen, mit der die zuvor reservierte IP-Adresse dem HTTP-Proxy zugeordnet wird.

Aus Cloud Shell

gcloud compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

An dieser Stelle können Sie prüfen, ob der Load Balancer mit der zuvor notierten IP-Adresse funktioniert.

6. Prüfen, ob der Load Balancer funktioniert

Um zu prüfen, ob die Lastenausgleichsfunktion funktioniert, müssen Sie eine gewisse Last generieren. Dazu erstellen wir eine neue VM, um die Last zu simulieren.

Siege-VM erstellen

Jetzt erstellen Sie die VM „siege“, mit der Sie die Auslastung generieren.

Aus Cloud Shell

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east1-a \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

Ausgabe

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm].
NAME      ZONE             MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
siege-vm  us-central1-ir1  e2-medium                  10.132.0.15  34.143.20.68  RUNNING

Als Nächstes können Sie eine SSH-Verbindung zur von Ihnen erstellten VM herstellen. Klicken Sie nach dem Erstellen auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.

Führen Sie nach der Verbindung den folgenden Befehl aus, um eine Last zu generieren. Verwenden Sie die IP-Adresse, die Sie zuvor für den externen HTTP-Load-Balancer reserviert haben.

Über Cloud Shell

siege -c 20 http://$lb-ipv4-2

Ausgabe

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Lastverteilung prüfen

Jetzt, da Siege ausgeführt wird, ist es an der Zeit zu prüfen, ob der Traffic gleichmäßig auf die beiden verwalteten Instanzgruppen verteilt wird.

Beende die Belagerung

Nachdem Sie gezeigt haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, den Belagerungszustand zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie Strg + C, um den Dienst zu beenden.

7. Service-LB-Richtlinie konfigurieren

Richtlinie für Dienst-Lastenausgleichsmodul erstellen

Nachdem die grundlegenden Einstellungen vorgenommen wurden, erstellen wir eine Service-LB-Richtlinie und testen die erweiterten Funktionen. Als Beispiel konfigurieren wir den Dienst so, dass einige erweiterte Lastenausgleichseinstellungen verwendet werden. In diesem Beispiel erstellen wir nur eine Richtlinie, um die Funktion zum automatischen Entladen von Kapazitäten zu nutzen. Sie können aber auch andere Funktionen ausprobieren.

Über Cloud Shell

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

Mit dem folgenden gcloud-Befehl können wir prüfen, ob unsere Richtlinie erfolgreich erstellt wurde:

Über Cloud Shell

gcloud beta network-services service-lb-policies list --location=global

Ausgabe

NAME
http-policy

Richtlinie des Dienst-Load-Balancers an Back-End-Dienst anhängen

Wir werden nun die neue Richtlinie an Ihren vorhandenen Backend-Dienst oben anhängen.

Über Cloud Shell

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. Backend-Zustand optimieren

Die neue Load Balancing-Richtlinie für Dienste wurde jetzt auf Ihren Back-End-Dienst angewendet. Technisch gesehen können Sie also direkt zur Bereinigung springen. Im Rahmen des Codelabs nehmen wir aber auch einige zusätzliche Produktionsanpassungen vor, um Ihnen zu zeigen, wie die neue Richtlinie funktioniert.

Mit der Funktion zum automatischen Kapazitätsausgleich wird eine Backend-MIG automatisch aus dem Load Balancer entfernt, wenn die Gesamtzahl der fehlerfreien Backends unter einen bestimmten Grenzwert (25%) fällt. Um diese Funktion zu testen, stellen wir eine SSH-Verbindung zu den VMs in us-east1-b-mig her und machen sie fehlerhaft. Bei einem Grenzwert von 25% müssen Sie über SSH eine Verbindung zu vier der VMs herstellen und den Apache-Server herunterfahren.

Wählen Sie dazu vier VMs aus und stellen Sie eine SSH-Verbindung her. Klicken Sie dazu auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen. Führen Sie dann den folgenden Befehl aus:

sudo apachectl stop

In diesem Fall wird die Funktion zum automatischen Kapazitätsabbau ausgelöst und es werden keine neuen Anfragen mehr an „us-east1-b-mig“ gesendet.

9. Prüfen, ob die Funktion zum automatischen Kapazitätsausgleich funktioniert

Siege neu starten

Um die neue Funktion zu überprüfen, verwenden wir die VM „siege“ noch einmal. Stellen Sie eine SSH-Verbindung zur VM her, die Sie im vorherigen Schritt erstellt haben. Klicken Sie anschließend auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.

Führen Sie nach der Verbindung den folgenden Befehl aus, um eine Last zu generieren. Verwenden Sie die IP-Adresse, die Sie zuvor für den externen HTTP-Load-Balancer reserviert haben.

Über Cloud Shell

siege -c 20 http://$lb-ipv4-2

Ausgabe

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Sie sehen jetzt, dass alle Anfragen an us-east1-a-mig gesendet werden.

Beende die Belagerung

Nachdem Sie nun gezeigt haben, dass die erweiterte Trafficaufteilung funktioniert, ist es an der Zeit, die Siege zu stoppen. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie Strg + C, um den Dienst zu beenden.

10. Schritte zur Bereinigung

Da wir die Lab-Umgebung nun fertiggestellt haben, ist es an der Zeit, sie zu entfernen. Führen Sie die folgenden Befehle aus, um die Testumgebung zu löschen.

Aus Cloud Shell

gcloud compute instances delete siege-vm --zone=us-east1-a

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv

gcloud compute url-maps delete web-map-http

gcloud compute backend-services delete east-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud beta network-services service-lb-policies delete http-policy --location=global

gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a
gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b

gcloud compute instance-templates delete test-template 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

11. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Externen Application Load Balancer mit Dienst-LB-Richtlinie erstellen
  • Konfigurieren Sie Ihren Backend-Dienst mit der Funktion „Automatischer Kapazitätsausgleich“.

Weiteres Vorgehen

  • Probieren Sie andere Funktionen der Service Load Balancing-Richtlinie aus.