1. Wprowadzenie
Możesz skonfigurować system równoważenia obciążenia sieci, aby rozdzielał ruch między instancje backendowe systemu równoważenia obciążenia na podstawie wag zgłaszanych przez kontrolę stanu HTTP za pomocą ważonego równoważenia obciążenia.
Równoważenie obciążenia ważone wymaga skonfigurowania tych elementów:
- Musisz ustawić zasadę lokalnego systemu równoważenia obciążenia (localityLbPolicy) usługi backendu na WEIGHTED_MAGLEV.
- Musisz skonfigurować usługę backendu z kontrolą stanu HTTP/HTTP2/HTTPS. Odpowiedzi na potrzeby kontroli stanu HTTP muszą zawierać niestandardowe pole nagłówka odpowiedzi HTTP X-Load-Balancing-Endpoint-Weight, które określa wagi z wartościami całkowitymi od 0 do 1000 w zapisie dziesiętnym dla każdej instancji backendowej.
Jeśli używasz tej samej grupy instancji jako backendu w przypadku wielu systemów równoważenia obciążenia opartych na usłudze backendu, które korzystają z ważonego równoważenia obciążenia, zalecamy użycie unikalnej ścieżki żądania na potrzeby każdej kontroli stanu usługi backendu. Więcej informacji znajdziesz w artykule Kryteria powodzenia kontroli stanu HTTP, HTTPS i HTTP/2.
Kontrola stanu HTTP powinna zwracać odpowiedź HTTP 200 (OK), po pomyślnym zakończeniu kontroli stanu i uznaniu instancji backendowej za dobry stan. W sytuacji, gdy wszystkie instancje backendowe przeszły kontrolę stanu i zwracają X-Load-Balancing-Endpoint-Weight bez wagi, system równoważenia obciążenia rozdziela nowe połączenia między sprawne backendy, traktując je z taką samą wagą. System równoważenia obciążenia może również 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 Wybór backendu i śledzenie połączeń.
Równoważenie obciążenia ważone może być używane 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 backendu może być nierówny. Jeśli sygnalizujesz mniejszą wagę na instancję, instancja o dużym obciążeniu może zmniejszyć udział w nowych połączeniach, podczas gdy nadal obsługuje ona istniejące połączenia.
- Jeśli backend jest przeciążony i przypisanie większej liczby połączeń może zerwać istniejące połączenia, takie backendy nie przypiszą sobie żadnej wagi. Jeśli sygnalizujesz zerową wagę, instancja backendowa przestaje obsługiwać nowe połączenia, ale nadal obsługuje istniejące.
- Jeśli backend opróżnia istniejące połączenia przed konserwacją, przypisuje sobie zerową wagę. Jeśli sygnalizujesz zerową wagę, instancja backendowa 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 rozprowadzać ruch między instancje backendów 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 wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu. - Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w ramach tego ćwiczenia z programowania można wykonywać w przeglądarce. Nie musisz niczego instalować.
2. Rozpocznij konfigurację
Ćwiczenia z programowania wymagają 1 projektu.
Z tego samouczka dowiesz się, jak utworzyć grupę instancji z 3 instancjami maszyn wirtualnych i przypisać do każdej z nich wagę. Tworzysz kontrolę stanu HTTP w celu raportowania wag instancji backendowych. Ważony system równoważenia obciążenia sieci jest włączony w usłudze backendu z zasadą lokalnego systemu równoważenia obciążenia jako WEIGHTED_MAGLEV.
Zanim zaczniesz
- Przeczytaj omówienie zewnętrznego systemu równoważenia obciążenia sieci opartego na usłudze backendu.
- Zainstaluj Google Cloud CLI. 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 interfejs Google Cloud CLI nie został wcześniej uruchomiony, najpierw uruchom polecenie gcloud init, aby się uwierzytelnić.
- włączyć 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 maszyn wirtualnych. Zamiast tego użyj Google Cloud CLI.
Tworzenie sieci VPC, podsieci i reguł zapory sieciowej
Utwórz sieć VPC, podsieć i ruch przychodzący, aby umożliwić regułom zapory sieciowej zezwalanie na połączenia z maszynami wirtualnymi backendu Twojego systemu równoważenia obciążenia.
- Utwórz sieć i podsieć VPC. 1: 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 do utworzenia.SUBNET_NAME
: nazwa podsieci do utworzenia.
- Utwórz regułę zezwalającą zapory sieciowej na ruch przychodzący, która zezwala na dostarczanie pakietów wysyłanych do docelowych portów TCP 80 i 443 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 ma zastosowanie do maszyn wirtualnych z tagiem sieci
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 wag
Utwórz 3 instancje maszyn wirtualnych i przypisz wagę:
- Skonfiguruj 3 instancje maszyn wirtualnych backendu tak, aby zwracać wagi w nagłówku X-Load-Balancing-Endpoint-Weight z odpowiedziami HTTP. W tym samouczku skonfigurujesz jedną instancję backendową do raportowania wagi zerowej, drugą instancję backendu do raportowania wagi 100 i trzecią instancję backendową do raportowania wagi 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
Z tego samouczka dowiesz się, jak utworzyć niezarządzaną grupę instancji zawierającą 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, którą chcesz utworzyć.
Tworzenie kontroli stanu HTTP
Z tego samouczka dowiesz się, jak utworzyć kontrolę stanu HTTP, aby odczytać odpowiedź HTTP zawierającą wagę maszyny wirtualnej backendu.
- 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
Przykład poniżej zawiera instrukcje tworzenia regionalnej zewnętrznej usługi backendu skonfigurowanego pod kątem ważonego równoważenia obciążenia.
- Utwórz usługę backendu z kontrolą stanu HTTP i ustaw zasadę lokalnego systemu 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 na potrzeby 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
. Zapisz 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 fragment
FORWARDING_RULE
: nazwa reguły przekierowania do utworzenia.IP_ADDRESS:
adres IP, który chcesz przypisać do instancji. Użyj zarezerwowanego statycznego zewnętrznego adresu IP, a nie nazwy adresu.
Sprawdzanie wag backendu przy użyciu interfejsu API usługi backendu
Sprawdź, czy wagi backendu są prawidłowo zgłaszane do kontroli stanu HTTP.
- Aby pobrać z usługi backendu wagi backendu (wraz ze stanami stanu), 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ć mniej więcej 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