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