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

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

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.