Ć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.