Codelab zu erweiterten Load-Balancing-Optimierungen

1. Einführung

Willkommen beim 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 für die Auswahl eines Zielendpunkts mit dem globalen externen Application Load Balancer.

Topologie und Anwendungsfälle für Codelab

2f7368df335d3de9.png

Abbildung 2. Routing-Topologie 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 Funktionen 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.

Lerninhalte

  • Hier erfahren Sie, wie Sie ServiceLbPolicy konfigurieren, um Ihren 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 das VPC-Netzwerk erstellt haben, erstellen Sie eine Firewallregel. Die Firewallregel wird verwendet, um allen IP-Adressen den Zugriff auf die externe IP-Adresse der Website der Testanwendung an 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 werden wir die Integrität der VMs optimieren. 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 Backend-Ressourcen enthalten, die vom HTTP Load Balancer verwendet werden. Zuerst erstellen wir Instanzvorlagen, in denen die Konfiguration für VMs definiert wird, die für jede Region erstellt werden sollen. Als Nächstes erstellen wir für jedes 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 beim Erstellen der Instanz verwiesen wird. Dieses Startscript installiert und aktiviert Webserverfunktionen, die wir zum Simulieren einer Webanwendung verwenden. Sie können sich das Skript ansehen.

Instanzvorlagen erstellen

Als Erstes erstellen Sie eine Instanzvorlage.

Ü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

Mit dem folgenden gcloud-Befehl können Sie prüfen, ob die 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

Als Nächstes müssen wir eine verwaltete Instanzgruppe aus den zuvor erstellten Instanzvorlagen erstellen.

Über 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-Script ausgeführt wird, das etwa Folgendes rendert:

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

Damit Ihre Webserver ordnungsgemäß funktionieren, rufen Sie „Compute Engine“ –> „VM-Instanzen“ auf. Prüfen Sie, ob Ihre neuen Instanzen (z.B. us-east1-a-mig-xxx) gemäß ihren Instanzgruppendefinitionen erstellt wurden.

Stellen Sie nun eine Webanfrage in Ihrem Browser, um sicherzustellen, dass der Webserver ausgeführt wird. Das Starten kann eine Minute dauern. Wählen Sie auf der Seite „VM-Instanzen“ unter „Compute Engine“ eine von Ihrer Instanzgruppe erstellte Instanz aus und klicken Sie auf ihre externe (öffentliche) IP-Adresse.

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

5. Load Balancer einrichten

Systemdiagnose erstellen

Zuerst müssen wir eine grundlegende Systemdiagnose erstellen, um sicherzustellen, dass unsere Dienste ordnungsgemäß ausgeführt werden. Wir erstellen eine einfache Systemdiagnose. Es sind viele weitere erweiterte Anpassungen möglich.

Ü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 an den Load Balancer angehängt wird.

Über 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

MIGs zu Backend-Diensten hinzufügen

Nachdem wir die Backend-Dienste erstellt haben, müssen wir jeder Backend-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

Über 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 Back-Ends hinzugefügt wurden.

Über 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 ist das Erstellen des Frontends. Dadurch wird die IP-Adresse, die Sie zuvor reserviert haben, der von Ihnen erstellten URL-Zuordnung des Load-Balancers 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.

Über 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 diesem Punkt können Sie überprü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 Load-Balancing-Funktion 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 siege-VM, mit der Sie die Last generieren.

Über 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 erstellten VM herstellen. Klicken Sie nach der Erstellung auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.

Führen Sie nach der Verbindung den folgenden Befehl aus, um 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

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

Belagerung beenden

Nachdem Sie nachgewiesen haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, die Belagerung zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie STRG+C, um den laufenden „siege“-Prozess zu beenden.

7. Richtlinie für Dienst-LB konfigurieren

Richtlinie für Dienst-LB erstellen

Nachdem die Grundeinstellung vorgenommen wurde, erstellen wir eine Service-LB-Richtlinie und probieren die erweiterten Funktionen aus. Als Beispiel konfigurieren wir den Dienst so, dass er einige erweiterte Load-Balancing-Einstellungen verwendet. In diesem Beispiel erstellen wir nur eine Richtlinie, um das Feature zum automatischen Entladen von Kapazitäten zu nutzen. Sie können aber gerne 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 die Richtlinie erfolgreich erstellt wurde:

Über Cloud Shell

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

Ausgabe

NAME
http-policy

Richtlinie für Dienst-LB an Back-End-Dienst anhängen

Wir hängen die neue Richtlinie jetzt an den oben genannten vorhandenen Back-End-Dienst an.

Über Cloud Shell

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

8. Backend-Zustand optimieren

An diesem Punkt wurde die neue Richtlinie für den Lastenausgleich des Dienstes auf Ihren Backend-Dienst angewendet. Sie können also technisch gesehen direkt zur Bereinigung springen. Im Rahmen des Codelabs werden wir aber auch einige zusätzliche Produktionsanpassungen vornehmen, um Ihnen zu zeigen, wie die neue Richtlinie funktioniert.

Durch den automatischen Kapazitätsausgleich wird eine Backend-MIG automatisch aus dem Load Balancer entfernt, wenn die Gesamtzahl der fehlerfreien Backends unter einen bestimmten Schwellenwert (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 Schwellenwert von 25% müssen Sie eine SSH-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, indem Sie auf „SSH“ klicken, um ein Terminal zu starten und eine Verbindung herzustellen. Führen Sie dann den folgenden Befehl aus.

sudo apachectl stop

An diesem Punkt wird die Funktion zum automatischen Kapazitätsabbau ausgelöst und us-east1-b-mig erhält keine neuen Anfragen mehr.

9. Prüfen, ob die Funktion „Automatischer Kapazitätsverbrauch“ funktioniert

Belagerung neu starten

Zur Überprüfung der neuen Funktion verwenden wir die Siege-VM wieder. Stellen Sie eine SSH-Verbindung zur VM her, die Sie im vorherigen Schritt erstellt haben. Klicken Sie nach der Erstellung auf „SSH“, um ein Terminal zu starten und eine Verbindung herzustellen.

Führen Sie nach der Verbindung den folgenden Befehl aus, um 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

An diesem Punkt werden alle Anfragen an us-east1-a-mig gesendet.

Belagerung beenden

Nachdem Sie nachgewiesen haben, dass die erweiterte Traffic-Aufteilung funktioniert, ist es an der Zeit, die Belagerung zu beenden. Kehren Sie dazu zum SSH-Terminal von siege-vm zurück und drücken Sie STRG+C, um den laufenden „siege“-Prozess zu beenden.

10. Bereinigungsschritte

Nachdem wir die Lab-Umgebung verwendet haben, ist es an der Zeit, sie abzubauen. Führen Sie die folgenden Befehle aus, um die Testumgebung zu löschen.

Über 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 einer Load-Balancing-Richtlinie für Dienste erstellen.
  • Konfigurieren Sie Ihren Backend-Dienst mit der Funktion für den automatischen Kapazitätsausgleich.

Weiteres Vorgehen

  • Weitere Funktionen der Dienst-Load-Balancing-Richtlinie ausprobieren