Ćwiczenie z programowania dotyczące zaawansowanych optymalizacji równoważenia obciążenia

1. Wprowadzenie

Witamy na szkoleniu z programowania poświęconych zaawansowanym optymalizacji równoważenia obciążenia.

Z tego ćwiczenia na temat kodu dowiesz się, jak skonfigurować zaawansowane opcje równoważenia obciążenia dla globalnego zewnętrznego systemu równoważenia obciążenia aplikacji. Przed rozpoczęciem zalecamy zapoznanie się z dokumentem dotyczącym równoważenia obciążenia w chmurze ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

c3fb1d3f027e8640.png

Rysunek 1. Proces wybierania punktu końcowego docelowego za pomocą globalnego zewnętrznego systemu równoważenia obciążenia aplikacji.

Topologia i przypadki użycia ćwiczeń z programowania

2f7368df335d3de9.png

Rysunek 2. Topologia routingu systemu równoważenia obciążenia HTTP

W tym łabie kodu skonfigurujesz 2 zarządzane grupy instancji. Utworzysz globalny zewnętrzny system równoważenia obciążenia HTTPS. System równoważenia obciążenia będzie korzystać z kilku funkcji z listy zaawansowanych funkcji obsługiwanych przez system równoważenia obciążenia oparty na Envoy. Po wdrożeniu wygenerujesz symulowane obciążenie i sprawdź, czy skonfigurowane konfiguracje działają prawidłowo.

Czego się nauczysz

  • Jak skonfigurować ServiceLbPolicy, aby dostroić system równoważenia obciążenia.

Czego potrzebujesz

  • Znajomość zewnętrznego systemu równoważenia obciążenia HTTPS. Pierwsza połowa tego ćwiczenia w Codelabs jest bardzo podobna do zewnętrznego systemu równoważenia obciążenia HTTPs z zaawansowanymi ćwiczeniami z programowania (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Najpierw warto zapoznać się z tą dokumentacją.

2. Zanim zaczniesz

Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany

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

włączyć interfejsy API,

Włączanie wszystkich niezbędnych usług

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. Tworzenie sieci VPC

Utwórz sieć VPC

Z Cloud Shell

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

Wyniki

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

Tworzenie reguł zapory sieciowej VPC

Po utworzeniu sieci VPC utwórz regułę zapory sieciowej. Reguła zapory sieciowej będzie używana do zezwalania wszystkim adresom IP na dostęp do zewnętrznego adresu IP witryny aplikacji testowej na porcie 80 dla ruchu http.

Z 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

Wyniki

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

W ramach tego ćwiczenia w programie zajmiemy się ulepszaniem stanu maszyn wirtualnych. Dlatego utworzymy też reguły zapory sieciowej, które zezwalają na SSH.

Z Cloud Shell

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

Wyniki

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. Konfigurowanie zarządzanych grup instancji

Musisz skonfigurować zarządzane grupy instancji, które zawierają wzorce zasobów backendu używanych przez system równoważenia obciążenia HTTP. Najpierw utworzymy szablony instancji, które definiują konfigurację maszyn wirtualnych do tworzenia w każdym regionie. Następnie dla backendu w każdym regionie utworzymy zarządzaną grupę instancji, która odwołuje się do szablonu instancji.

Zarządzane grupy instancji mogą mieć zakres strefowy lub regionalny. W tym ćwiczeniu będziemy tworzyć strefowe zarządzane grupy instancji.

W tej sekcji możesz zobaczyć utworzony wcześniej skrypt uruchamiający, który będzie używany podczas tworzenia instancji. Ten skrypt uruchamiający instaluje i włącza funkcje serwera WWW, których użyjemy do symulowania aplikacji internetowej. Możesz zapoznać się z tym skryptem.

Tworzenie szablonów instancji

Pierwszym krokiem jest utworzenie szablonu instancji.

Z 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'

Wyniki

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

Teraz możesz sprawdzić, czy szablony instancji zostały utworzone, za pomocą tego polecenia gcloud:

Z Cloud Shell

gcloud compute instance-templates list

Wyniki

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

Tworzenie grup instancji

Teraz musimy utworzyć zarządzaną grupę instancji na podstawie utworzonych wcześniej szablonów instancji.

Z Cloud Shell

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

Wyniki

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

Z Cloud Shell

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

Wyniki

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

Aby sprawdzić, czy grupy instancji zostały utworzone, użyj tego polecenia gcloud:

Z Cloud Shell

gcloud compute instance-groups list

Wyniki

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

Sprawdzanie funkcjonalności serwera WWW

Każda instancja jest skonfigurowana do uruchamiania serwera WWW Apache z prostym skryptem PHP wyświetlającym treści podobne do tego:

Strona wyświetlana z: us-east1-a-mig-ww2h

Aby sprawdzić, czy serwery WWW działają prawidłowo, otwórz Compute Engine > Instancje maszyn wirtualnych. Upewnij się, że nowe instancje (np. us-east1-a-mig-xxx) zostały utworzone zgodnie z definicjami grup instancji.

Wyślij do niej żądanie sieciowe, by sprawdzić, czy serwer WWW działa (uruchomienie może chwilę potrwać). Na stronie instancji maszyn wirtualnych w Compute Engine wybierz instancję utworzoną przez grupę instancji i kliknij jej adres IP zewnętrzny (publiczny).

Możesz też przejść w przeglądarce pod adres http://<adres_IP>

5. Konfigurowanie systemu równoważenia obciążenia

Tworzenie kontroli stanu

Najpierw musimy utworzyć podstawową kontrolę stanu, aby upewnić się, że nasze usługi działają prawidłowo. Utworzymy podstawową kontrolę stanu, ale dostępnych jest też wiele bardziej zaawansowanych opcji.

Z Cloud Shell

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

Wyniki

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

Zarezerwuj zewnętrzny adres IP

W tym kroku musisz zarezerwować dostępny globalnie statyczny adres IP, który później zostanie dołączony do systemu równoważenia obciążenia.

Z Cloud Shell

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

Wyniki

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

Zapisz zarezerwowany adres IP.

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

Tworzenie usług backendu

Teraz musimy utworzyć usługę backendu dla utworzonych wcześniej zarządzanych grup instancji.

Z 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

Wyniki

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

Dodawanie zarządzanych grup instancji do usług backendowych

Po utworzeniu usług backendu musimy dodać do każdej z nich utworzone wcześniej zarządzane grupy instancji.

Z Cloud Shell

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

Z Cloud Shell

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

Aby sprawdzić, czy backendy zostały dodane, uruchom to polecenie.

Z Cloud Shell

gcloud compute backend-services list

Wyniki

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

Tworzenie mapy URL

Teraz utworzymy mapę URL.

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

Wyniki

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

Tworzenie frontendu HTTP

Ostatnim krokiem w tworzeniu systemu równoważenia obciążenia jest utworzenie frontendu. Spowoduje to zmapowanie zarezerwowanego wcześniej adresu IP do utworzonej przez Ciebie mapy adresów URL systemu równoważenia obciążenia.

Z Cloud Shell

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

Wyniki

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

Następnie musisz utworzyć globalną regułę przekierowania, która będzie mapować zarezerwowany wcześniej adres IP na serwer proxy HTTP.

Z 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

Teraz możesz sprawdzić, czy system równoważenia obciążenia działa z adresem IP zapisanym wcześniej.

6. Sprawdzanie działania systemu równoważenia obciążenia

Aby sprawdzić, czy funkcja równoważenia obciążenia działa, musisz wygenerować obciążenie. Aby to zrobić, utworzymy nową maszynę wirtualną, która będzie symulować obciążenie.

Tworzenie instancji Siege-vm

Teraz utworzysz siege-vm, który będzie służyć do generowania obciążenia.

Z 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'

Wyniki

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

Następnie możesz połączyć się przez SSH z utworzoną maszyną wirtualną. Po utworzeniu kliknij SSH, aby uruchomić terminal i nawiązać połączenie.

Po nawiązaniu połączenia uruchom to polecenie, aby wygenerować obciążenie. Użyj adresu IP zarezerwowanego wcześniej dla zewnętrznego systemu równoważenia obciążenia HTTP.

Z Cloud Shell

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

Wyniki

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

Sprawdzanie rozkładu obciążenia

Teraz, gdy Siege działa, sprawdź, czy ruch jest równomiernie rozprowadzany do 2 zarządzanych grup instancji.

Zatrzymaj oblężenie

Teraz, gdy już wiesz, że zaawansowane rozdzielanie ruchu działa, możesz zakończyć testowanie. Aby to zrobić, wróć do terminala SSH instancji siege-vm i naciśnij CTRL+C, aby zatrzymać działanie siege.

7. Konfigurowanie zasady równoważenia obciążenia usługi

Tworzenie zasady systemu równoważenia obciążenia usługi

Teraz, gdy podstawowe ustawienia są już gotowe, utworzymy zasadę Lb usługi i wypróbujemy zaawansowane funkcje. W tym celu skonfigurujemy usługę tak, aby używała zaawansowanych ustawień równoważenia obciążenia. W tym przykładzie utworzymy zasadę, aby skorzystać z funkcji automatycznego wyczerpywania pojemności. Możesz jednak wypróbować inne funkcje.

Z Cloud Shell

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

Aby sprawdzić, czy zasada została utworzona, użyj tego polecenia gcloud:

Z Cloud Shell

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

Wyniki

NAME
http-policy

Dołączanie zasad systemu równoważenia obciążenia usługi do usługi backendu

Dołączymy teraz nową zasadę do istniejącej usługi backendu powyżej.

Z Cloud Shell

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

8. Tweak Backend Health

W tym momencie nowa zasada równoważenia obciążenia usługi została zastosowana do usługi backendu. Możesz więc przejść bezpośrednio do czyszczenia. Jednak w ramach tych ćwiczeń wprowadzimy też kilka dodatkowych usprawnień w środowisku produkcyjnym, aby pokazać Ci, jak działają nowe zasady.

Funkcja automatycznego wyczerpywania zasobów usunie automatycznie backend MIG z równoważnika obciążenia, gdy łączna liczba zdrowych backendów spadnie poniżej określonego progu (25%). Aby przetestować tę funkcję, połączymy się przez SSH z maszynami wirtualnymi w us-east1-b-mig i spowodujemy, że stan ich działania zmieni się na nieprawidłowy. W przypadku progu 25% musisz połączyć się przez SSH z 4 maszynami wirtualnymi i wyłączyć serwer Apache.

Aby to zrobić, wybierz 4 maszyny wirtualne i nawiązać połączenie z serwerem SSH, klikając SSH, aby uruchomić terminal i nawiązać połączenie. Następnie uruchom to polecenie.

sudo apachectl stop

W tym momencie zostanie uruchomiona funkcja automatycznego wyczerpywania pojemności i us-east1-b-mig nie będzie otrzymywać nowych żądań.

9. Sprawdzanie, czy działa funkcja automatycznego odprowadzania mocy

Ponowne uruchamianie obchodzenia zabezpieczeń

Aby sprawdzić nową funkcję, ponownie użyjemy maszyny wirtualnej siege. Nawiązujemy połączenie SSH z maszyną wirtualną utworzoną w poprzednim kroku. Po utworzeniu kliknij SSH, aby uruchomić terminal i nawiązać połączenie.

Po nawiązaniu połączenia uruchom to polecenie, aby wygenerować obciążenie. Użyj adresu IP zarezerwowanego wcześniej dla zewnętrznego systemu równoważenia obciążenia HTTP.

Z Cloud Shell

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

Wyniki

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

W tym momencie zauważysz, że wszystkie żądania są wysyłane do us-east1-a-mig.

Zatrzymaj oblężenie

Po udowodnieniu, że zaawansowany podział ruchu działa, czas zaprzestać oblężenia. Aby to zrobić, wróć do terminala SSH instancji siege-vm i naciśnij CTRL+C, aby zatrzymać działanie siege.

10. Czyszczenie

Skończyliśmy z środowiskiem modułu, więc czas je zamknąć. Aby usunąć środowisko testowe, uruchom te polecenia.

Z 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. Gratulacje!

Gratulujemy ukończenia ćwiczenia.

Omówione zagadnienia

  • Tworzenie zewnętrznego systemu równoważenia obciążenia aplikacji z zasadą równoważenia obciążenia usługi.
  • Skonfiguruj usługę backendu z funkcją automatycznego wyczerpywania możliwości.

Dalsze kroki

  • Wypróbuj inne funkcje dostępne w ramach zasad usługi LB.