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

1. Wprowadzenie

Witamy w ćwiczeniach z programowania dotyczących zaawansowanych optymalizacji równoważenia obciążenia.

Z tego ćwiczenia dowiesz się, jak skonfigurować zaawansowane opcje równoważenia obciążenia w przypadku globalnego zewnętrznego systemu równoważenia obciążenia aplikacji. Zanim zaczniesz, zapoznaj 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 docelowego punktu końcowego za pomocą globalnego zewnętrznego systemu równoważenia obciążenia aplikacji.

Topologia i przypadki użycia Codelab

2f7368df335d3de9.png

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

W tym laboratorium z kodem utworzysz 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 możliwości, które obsługuje system równoważenia obciążenia oparty na Envoyu. Po wdrożeniu wygeneruj symulowane obciążenie i sprawdź, czy skonfigurowane ustawienia działają prawidłowo.

Czego się nauczysz

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

Czego potrzebujesz

  • Znajomość zewnętrznego równoważenia obciążenia HTTPS. Pierwsza część tego laboratorium jest dość podobna do laboratorium dotyczącego zewnętrznego systemu równoważenia obciążenia HTTP(S) z zaawansowanym zarządzaniem ruchem (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Zalecamy najpierw zapoznać się z tymi informacjami.

2. Zanim zaczniesz

W Cloud Shell sprawdź, 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łącz wszystkie niezbędne usługi

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 w przypadku 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 tym ćwiczeniu zmodyfikujemy stan maszyn wirtualnych. 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 określają konfigurację maszyn wirtualnych do utworzenia w każdym regionie. Następnie dla każdego regionu utworzymy zarządzaną grupę instancji, która odwołuje się do szablonu instancji.

Zarządzane grupy instancji mogą mieć zasięg strefowy lub regionalny. W tym laboratorium utworzymy strefowe zarządzane grupy instancji.

W tej sekcji możesz zobaczyć wstępnie utworzony skrypt startowy, do którego będzie się odwoływać instancja podczas tworzenia. Ten skrypt startowy instaluje i włącza funkcje serwera WWW, których użyjemy do symulowania aplikacji internetowej. Możesz przyjrzeć się temu skryptowi.

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

Możesz teraz 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

Utwórz grupy 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

Możemy sprawdzić, czy grupy instancji zostały utworzone, za pomocą 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 działania serwera WWW

Każda instancja jest skonfigurowana do uruchamiania serwera WWW Apache z prostym skryptem PHP, który renderuje coś podobnego do poniższego przykładu:

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. Sprawdź, czy nowe instancje (np. us-east1-a-mig-xxx) zostały utworzone zgodnie z definicjami grup instancji.

Teraz wyślij żądanie internetowe w przeglądarce, aby sprawdzić, czy serwer WWW działa (uruchomienie może potrwać minutę). Na stronie Instancje maszyn wirtualnych w sekcji Compute Engine wybierz instancję utworzoną przez grupę instancji i kliknij jej zewnętrzny (publiczny) adres IP.

Możesz też otworzyć w przeglądarce adres http://<IP_Address>.

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

Utwórz kontrolę stanu

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

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

Rezerwowanie zewnętrznego adresu 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 backendu

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 zostały dodane usługi backendu, 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

Utwórz mapę 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 tworzenia systemu równoważenia obciążenia jest utworzenie frontendu. Spowoduje to przypisanie zarezerwowanego wcześniej adresu IP do utworzonej mapy 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 zmapuje 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

W tym momencie możesz sprawdzić, czy system równoważenia obciążenia działa z adresem IP, który został wcześniej zapisany.

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

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

Tworzenie instancji Siege-vm

Teraz utworzysz maszynę wirtualną siege-vm, której użyjesz 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 instancji kliknij SSH, aby uruchomić terminal i nawiązać połączenie.

Po połączeniu 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

Po uruchomieniu narzędzia Siege sprawdź, czy ruch jest równomiernie rozdzielany między 2 zarządzane grupy instancji.

Zatrzymaj oblężenie

Skoro udało Ci się już udowodnić, że zaawansowane dzielenie ruchu działa, czas zakończyć oblężenie. Aby to zrobić, wróć do terminala SSH instancji siege-vm i naciśnij CTRL+C, aby zatrzymać działanie narzędzia siege.

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

Tworzenie zasady LB usługi

Po wykonaniu podstawowej konfiguracji utworzymy zasadę równoważenia obciążenia usługi i wypróbujemy funkcje zaawansowane. Na przykład skonfigurujemy usługę tak, aby korzystała z niektórych zaawansowanych ustawień równoważenia obciążenia. W tym przykładzie utworzymy zasadę, która będzie korzystać z funkcji automatycznego zmniejszania 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 zasady zostały utworzone, użyj tego polecenia gcloud:

Z Cloud Shell

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

Wyniki

NAME
http-policy

Dołączanie zasady LB usługi do usługi backendu

Teraz dołączymy nowe zasady do istniejącej usługi backendu.

Z Cloud Shell

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

8. Dostosowywanie stanu backendu

Na tym etapie 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. W ramach ćwiczenia w Codelabs wprowadzimy też dodatkowe zmiany w wersji produkcyjnej, aby pokazać, jak działają nowe zasady.

Funkcja automatycznego wyczerpywania pojemności automatycznie usuwa z usługi równoważenia obciążenia backendową grupę MIG, gdy łączna liczba prawidłowo działających backendów spadnie poniżej określonego progu (25%). Aby przetestować tę funkcję, połączymy się z maszynami wirtualnymi w grupie us-east1-b-mig przez SSH i ustawimy ich stan jako nieprawidłowy. Przy progu 25% musisz połączyć się z 4 maszynami wirtualnymi za pomocą SSH i wyłączyć serwer Apache.

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

sudo apachectl stop

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

9. Sprawdzanie działania funkcji automatycznego rozładowywania

Ponowne uruchomienie oblężenia

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

Po połączeniu 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

Skoro udało Ci się już udowodnić, że zaawansowane dzielenie ruchu działa, czas zakończyć oblężenie. Aby to zrobić, wróć do terminala SSH instancji siege-vm i naciśnij CTRL+C, aby zatrzymać działanie narzędzia siege.

10. Procedura czyszczenia

Gdy skończysz korzystać ze środowiska modułu, możesz 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 zasadami równoważenia obciążenia usługi.
  • Skonfiguruj usługę backendu za pomocą funkcji automatycznego wyczerpywania możliwości.

Dalsze kroki

  • Wypróbuj inne funkcje udostępniane przez zasady równoważenia obciążenia usługi.