1. Wprowadzenie
Możesz skonfigurować sieciowy system równoważenia obciążenia, 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.
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 sieciowych 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żywanie unikalnej ścieżki żądania dla 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), aby kontrole stanu były zaliczane, a instancja backendowa była uznawana za prawidłową. W sytuacjach, gdy wszystkie instancje backendowe przejdą kontrole stanu i zwrócą X-Load-Balancing-Endpoint-Weight z wagą zero, system równoważenia obciążenia rozdzieli nowe połączenia między prawidłowe backendy, traktując je z równą wagą. System równoważenia obciążenia może też rozdzielać nowe połączenia między nieprawidłowe backendy. 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 trwają dłużej niż inne, rozkład obciążenia backendu może być nierównomierny. Sygnalizując niższą wagę na instancję, instancja o dużym obciążeniu może zmniejszyć swój udział w nowych połączeniach, jednocześnie obsługując istniejące połączenia.
- Jeśli backend jest przeciążony i przypisanie większej liczby połączeń może spowodować przerwanie istniejących połączeń, takie backendy przypisują sobie wagę zero. Sygnalizując wagę zero, instancja backendowa przestaje obsługiwać nowe połączenia, ale nadal obsługuje istniejące.
- Jeśli backend wyczerpuje istniejące połączenia przed konserwacją, przypisuje sobie wagę zero. Sygnalizując wagę zero, instancja backendowa przestaje obsługiwać nowe połączenia, ale nadal obsługuje istniejące.
Czego się nauczysz
- Jak skonfigurować sieciowy system równoważenia obciążenia, 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.
Konfiguracja środowiska we własnym tempie
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to nazwa wyświetlana dla uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz go zmienić w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i niezmienny (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 modułów 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ć użyć własnego identyfikatora i sprawdzić, czy jest dostępny. Po wykonaniu tego kroku nie można go zmienić i pozostanie on taki przez cały czas trwania projektu. - Dla Twojej informacji istnieje trzecia wartość – numer projektu , której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. Wykonanie tego modułu nie powinno kosztować dużo, a nawet nic. 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
Chociaż Google Cloud można obsługiwać zdalnie z laptopa, w tym module 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:

Uzyskanie dostępu do środowiska i połączenie się z nim może zająć kilka chwil. Gdy to się uda, zobaczysz coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym module możesz wykonać w przeglądarce. Nie musisz niczego instalować.
2. Rozpoczęcie konfiguracji
Moduł wymaga jednego projektu.
W tym samouczku utworzysz grupę instancji z 3 instancjami maszyn wirtualnych i przypiszesz wagi do każdej instancji. Utworzysz 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
- Przeczytaj omówienie zewnętrznego równoważenia obciążenia sieciowego opartego na usłudze backendu.
- Zainstaluj Google Cloud CLI. Pełne omówienie narzędzia znajdziesz w przewodniku po gcloud CLI. Polecenia związane z równoważeniem obciążenia znajdziesz w dokumentacji interfejsu API i gcloud CLI. Jeśli nie masz jeszcze zainstalowanego interfejsu wiersza poleceń Google Cloud, najpierw uruchom 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 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ć. a. 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 te elementy:
NETWORK_NAME: nazwa sieci VPC, którą chcesz utworzyć.SUBNET_NAME: nazwa podsieci, którą chcesz utworzyć.
- Utwórz regułę zapory sieciowej zezwalającą na ruch przychodzący, aby zezwolić 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 dotyczy 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 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ę backendową, aby zgłaszała wagę zero, 2 instancję backendową, aby zgłaszała wagę 100, a 3 instancję backendową, 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 znajdziesz instrukcje tworzenia 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, którą chcesz utworzyć.
Tworzenie kontroli stanu HTTP
W tym samouczku znajdziesz instrukcje tworzenia kontroli stanu HTTP, która będzie odczytywać 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
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_NAMEnazwą 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, którą chcesz utworzyć.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 za pomocą interfejsu API usługi backendu
Sprawdź, czy wagi backendu są prawidłowo zgłaszane do kontroli stanu HTTP.
- Aby pobrać wagi backendu (wraz ze stanami 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