1. Wprowadzenie
Możesz skonfigurować sieciowy system równoważenia obciążenia tak, aby rozdzielał ruch między instancjami backendu systemu równoważenia obciążenia na podstawie wag zgłaszanych przez sprawdzanie stanu HTTP za pomocą ważonego równoważenia obciążenia.
Ważone równoważenie obciążenia wymaga skonfigurowania obu tych elementów:
- Musisz ustawić zasadę lokalnego równoważenia obciążenia (localityLbPolicy) usługi backendu na WEIGHTED_MAGLEV.
- Musisz skonfigurować usługę backendu za pomocą kontroli stanu HTTP/HTTP2/HTTPS. Odpowiedzi kontroli stanu HTTP muszą zawierać niestandardowe pole nagłówka odpowiedzi HTTP X-Load-Balancing-Endpoint-Weight, aby określać wagi za pomocą wartości całkowitych od 0 do 1000 w postaci dziesiętnej dla każdej instancji backendowej.
Jeśli używasz tej samej grupy instancji jako backendu dla wielu systemów równoważenia obciążenia sieci opartych na usłudze backendu, które korzystają z równoważenia obciążenia z wagami, zalecamy używanie unikalnej ścieżki żądania dla każdego sprawdzania stanu usługi backendu. Więcej informacji znajdziesz w artykule Kryteria powodzenia sprawdzania stanu HTTP, HTTPS i HTTP/2.
Aby kontrole stanu zakończyły się powodzeniem, a instancja backendu została uznana za działającą prawidłowo, kontrola stanu HTTP powinna zwracać odpowiedź HTTP 200 (OK). Jeśli wszystkie instancje backendowe przejdą kontrolę stanu i zwrócą wartość X-Load-Balancing-Endpoint-Weight z wagą zerową, system równoważenia obciążenia rozdzieli nowe połączenia między sprawne backendy, traktując je z równą wagą. System równoważenia obciążenia może też rozdzielać nowe połączenia między backendy w złym stanie. Więcej informacji znajdziesz w artykule Dystrybucja ruchu.
Przykłady ważonego równoważenia obciążenia znajdziesz w artykule Wybieranie backendu i śledzenie połączeń.
Ważone równoważenie obciążenia można stosować w tych sytuacjach:
- Jeśli niektóre połączenia przetwarzają więcej danych niż inne lub niektóre połączenia działają dłużej niż inne, rozkład obciążenia na backendzie może być nierównomierny. Sygnalizując mniejszą wagę na instancję, instancja o dużym obciążeniu może zmniejszyć swój udział w nowych połączeniach, zachowując obsługę istniejących połączeń.
- Jeśli backend jest przeciążony i przypisanie większej liczby połączeń może spowodować przerwanie istniejących połączeń, przypisuje sobie wagę zerową. Wskazując zerową wagę, instancja backendu przestaje obsługiwać nowe połączenia, ale nadal obsługuje istniejące.
- Jeśli przed konserwacją backend wyczerpuje istniejące połączenia, przypisuje sobie wagę zerową. Wskazanie zerowej wagi powoduje, że instancja backendu przestaje obsługiwać nowe połączenia, ale nadal obsługuje istniejące.
Czego się nauczysz
- Jak skonfigurować system równoważenia obciążenia sieci, aby rozdzielać ruch między instancje backendu systemu równoważenia obciążenia na podstawie wag zgłaszanych przez kontrolę stanu HTTP za pomocą ważonego równoważenia obciążenia.
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail lub Google Workspace, musisz je utworzyć.
- Nazwa projektu to wyświetlana nazwa dla uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID
). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Nie można go zmienić po tym kroku i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje jeszcze trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Udostępnienie środowiska i połączenie się z nim może zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.
2. Rozpocznij konfigurację
Codelab wymaga jednego projektu.
W tym samouczku utworzysz grupę instancji z 3 instancjami maszyn wirtualnych i przypiszesz do każdej z nich wagi. Tworzysz kontrolę stanu HTTP, aby zgłaszać wagi instancji backendowych. Ważony sieciowy system równoważenia obciążenia jest włączony w usłudze backendu z zasadą lokalnego równoważenia obciążenia WEIGHTED_MAGLEV.
Zanim zaczniesz
- Zapoznaj się z omówieniem zewnętrznego równoważenia obciążenia sieciowego opartego na usłudze backendu.
- Zainstaluj interfejs wiersza poleceń Google Cloud. Pełne omówienie narzędzia znajdziesz w omówieniu interfejsu wiersza poleceń gcloud. Polecenia związane z równoważeniem obciążenia znajdziesz w dokumentacji interfejsu API i gcloud CLI. Jeśli wiersz poleceń Google Cloud nie był wcześniej używany, najpierw uruchom polecenie gcloud init, aby się uwierzytelnić.
- Włącz interfejs Compute API.
gcloud services enable compute.googleapis.com
Uwaga: nie możesz używać konsoli Google Cloud do konfigurowania zasady lokalnego systemu równoważenia obciążenia i przypisywania wag do instancji maszyn wirtualnych. Zamiast tego użyj Google Cloud CLI.
Tworzenie sieci VPC, podsieci i reguł zapory sieciowej
Utwórz sieć VPC, podsieć i reguły zapory sieciowej zezwalające na ruch przychodzący, aby zezwolić na połączenia z maszynami wirtualnymi backendu systemu równoważenia obciążenia.
- Utwórz sieć VPC i podsieć. Aby utworzyć sieć VPC, uruchom polecenie
gcloud compute networks create
:
.
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. W tym przykładzie podstawowy zakres adresów IPv4 podsieci to 10.10.0.0/24
.
Aby utworzyć podsieć, uruchom polecenie gcloud compute networks subnets create
:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Zastąp następujące elementy:
NETWORK_NAME
: nazwa sieci VPC, którą chcesz utworzyć.SUBNET_NAME
: nazwa podsieci do utworzenia.
- Utwórz regułę zapory sieciowej zezwalającą na ruch przychodzący, aby pakiety wysyłane na docelowe porty TCP 80 i 443 mogły być dostarczane do maszyn wirtualnych backendu. W tym przykładzie reguła zapory sieciowej zezwala na połączenia z dowolnego źródłowego adresu IP. Reguła zapory sieciowej obowiązuje w przypadku maszyn wirtualnych z tagiem sieciowym
network-lb-tag
. Aby utworzyć regułę zapory sieciowej, uruchom poleceniegcloud compute firewall-rules create
:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
Zastąp FIREWALL_RULE_NAME
nazwą reguły zapory sieciowej, którą chcesz utworzyć.
Tworzenie instancji maszyn wirtualnych i przypisywanie do nich wag
Utwórz 3 instancje maszyn wirtualnych i przypisz im wagi:
- Skonfiguruj 3 instancje maszyn wirtualnych backendu, aby zwracały wagi w nagłówku X-Load-Balancing-Endpoint-Weight w odpowiedziach HTTP. W tym samouczku skonfigurujesz 1 instancję backendu, aby zgłaszała wagę 0, 2 instancję backendu, aby zgłaszała wagę 100, i 3 instancję backendu, aby zgłaszała wagę 900. Aby utworzyć instancje, uruchom polecenie
gcloud compute instances create
:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load 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 lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
Tworzenie grupy instancji
W tym samouczku podasz instrukcje utworzenia niezarządzanej grupy instancji zawierającej wszystkie 3 instancje maszyn wirtualnych(instance-0, instance-100, and instance-900
).
- Aby utworzyć grupę instancji, uruchom polecenie
gcloud compute instance-groups unmanaged create
:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
Zastąp INSTANCE_GROUP
nazwą grupy instancji do utworzenia.
Tworzenie kontroli stanu HTTP
W tym samouczku znajdziesz instrukcje tworzenia kontroli stanu HTTP, która odczytuje odpowiedź HTTP zawierającą wagę backendu maszyny wirtualnej.
- Aby utworzyć kontrolę stanu HTTP, uruchom polecenie
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Zastąp HTTP_HEALTH_CHECK_NAME
nazwą kontroli stanu HTTP, którą chcesz utworzyć.
Tworzenie usługi backendu
W tym przykładzie znajdziesz instrukcje tworzenia regionalnej zewnętrznej usługi backendu skonfigurowanej do korzystania z ważonego równoważenia obciążenia.
- Utwórz usługę backendu z kontrolą stanu HTTP i ustaw zasadę lokalnego równoważenia obciążenia na WEIGHTED_MAGLEV.
- Aby utworzyć usługę backendu, uruchom polecenie
gcloud compute backend-services create
:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
- Zastąp
BACKEND_SERVICE_NAME
nazwą usługi backendu, którą chcesz utworzyć.
- Dodaj grupę instancji do usługi backendu.
- Aby dodać grupę instancji, uruchom polecenie
gcloud compute backend-services add-backend
:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- Zarezerwuj regionalny zewnętrzny adres IP dla systemu równoważenia obciążenia.
- Aby zarezerwować co najmniej 1 adres IP, uruchom polecenie
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Zastąp ADDRESS_NAME
nazwą adresu IP, który chcesz utworzyć. Aby wyświetlić wynik, użyj polecenia compute addresses describe
. Zanotuj zarezerwowany statyczny zewnętrzny adres IP („IP_ADDRESS'
).
gcloud compute addresses describe ADDRESS_NAME
- Utwórz regułę przekierowania, używając zarezerwowanego regionalnego zewnętrznego adresu IP „IP_ADDRESS”. Połącz regułę przekierowania z usługą backendu.
- Aby utworzyć regułę przekierowania, uruchom polecenie
gcloud compute forwarding-rules create
:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- Zastąp te elementy:
FORWARDING_RULE
– nazwa reguły przekierowania do utworzenia.IP_ADDRESS:
adres IP, który ma zostać przypisany do instancji. Używaj zarezerwowanego statycznego zewnętrznego adresu IP, a nie nazwy adresu.
Sprawdzanie wag backendów za pomocą interfejsu API usługi backendu
Sprawdź, czy wagi backendów są prawidłowo raportowane do kontroli stanu HTTP.
- Aby uzyskać wagi backendów (wraz ze stanami ich kondycji) z usługi backendu, uruchom polecenie
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Dane wyjściowe powinny wyglądać tak:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth