О практической работе
1. Введение
Вы можете настроить сетевой балансировщик нагрузки для распределения трафика между внутренними экземплярами балансировщика нагрузки на основе весовых коэффициентов, сообщаемых проверкой работоспособности HTTP, с использованием взвешенной балансировки нагрузки.
Для балансировки взвешенной нагрузки необходимо настроить оба следующих параметра:
- Необходимо установить политику балансировки нагрузки локальности (localityLbPolicy) внутренней службы на WEIGHTED_MAGLEV.
- Необходимо настроить серверную службу для проверки работоспособности HTTP/HTTP2/HTTPS. Ответы на проверку работоспособности HTTP должны содержать настраиваемое поле заголовка HTTP-ответа X-Load-Balancing-Endpoint-Weight, чтобы указать весовые коэффициенты с целыми значениями от 0 до 1000 в десятичном представлении для каждого экземпляра серверной части.
Если вы используете одну и ту же группу экземпляров в качестве бэкенда для нескольких балансировщиков сетевой нагрузки на основе бэкенд-сервисов с весовой балансировкой нагрузки, рекомендуется использовать уникальный путь запроса для каждой проверки работоспособности бэкенд-сервиса. Подробнее см. в разделе Критерии успеха для проверок работоспособности HTTP, HTTPS и HTTP/2 .
HTTP-проверка работоспособности должна возвращать ответ HTTP 200 (OK), чтобы проверка работоспособности прошла успешно, а экземпляр бэкенда считался работоспособным. В ситуациях, когда все экземпляры бэкенда проходят проверку работоспособности и возвращают X-Load-Balancing-Endpoint-Weight с нулевым весом, балансировщик нагрузки распределяет новые соединения между работоспособными бэкендами, придавая им одинаковый вес. Балансировщик нагрузки также может распределять новые соединения между неработоспособными бэкендами. Подробнее см. в разделе Распределение трафика .
Примеры взвешенной балансировки нагрузки см. в разделе Выбор бэкэнда и отслеживание соединений .
Взвешенную балансировку нагрузки можно использовать в следующих сценариях:
- Если некоторые соединения обрабатывают больше данных, чем другие, или некоторые соединения существуют дольше других, распределение нагрузки на бэкенд может стать неравномерным. Сигнализируя о более низком весе на экземпляр, экземпляр с высокой нагрузкой может сократить свою долю новых соединений, продолжая при этом обслуживать существующие.
- Если бэкенд перегружен и назначение дополнительных соединений может привести к разрыву существующих, такой бэкенд присваивает себе нулевой вес. Передавая сигнал о нулевом весе, экземпляр бэкенда прекращает обслуживание новых соединений, но продолжает обслуживать существующие.
- Если бэкенд завершает работу существующих соединений перед обслуживанием, он присваивает себе нулевой вес. Передавая сигнал о нулевом весе, бэкенд прекращает обслуживание новых соединений, но продолжает обслуживать существующие.
Чему вы научитесь
- Как настроить сетевой балансировщик нагрузки для распределения трафика между внутренними экземплярами балансировщика нагрузки на основе весовых коэффициентов, сообщаемых проверкой работоспособности HTTP, с использованием взвешенной балансировки нагрузки.
Настройка среды для самостоятельного обучения
- Войдите в Google Cloud Console и создайте новый проект или используйте существующий. Если у вас ещё нет учётной записи Gmail или Google Workspace, вам необходимо её создать .
- Название проекта — отображаемое имя участников проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и неизменяем (нельзя изменить после установки). Cloud Console автоматически генерирует уникальную строку; обычно её значение не имеет значения. В большинстве практических работ вам потребуется ссылаться на идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете сгенерировать другой случайный идентификатор. Вы также можете попробовать создать свой собственный идентификатор и посмотреть, доступен ли он. После этого шага его нельзя будет изменить, и он останется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трёх значениях можно узнать в документации .
- Далее вам нужно включить биллинг в Cloud Console для использования облачных ресурсов/API. Выполнение этой лабораторной работы не должно потребовать больших затрат, если вообще потребует. Чтобы отключить ресурсы и не платить за них после окончания этого руководства, вы можете удалить созданные вами ресурсы или весь проект. Новые пользователи Google Cloud могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лабораторной работе вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud Console нажмите значок Cloud Shell на верхней правой панели инструментов:
Подготовка и подключение к среде займёт всего несколько минут. После завершения вы увидите примерно следующее:
Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в облаке Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять в браузере. Вам не нужно ничего устанавливать.
2. Начать конфигурацию
Для Codelab требуется один проект.
В этом руководстве вы создадите группу экземпляров из трёх экземпляров виртуальных машин и назначите веса каждому экземпляру. Вы создадите HTTP-проверку работоспособности для отчёта весов экземпляров бэкенда. Весовой балансировщик сетевой нагрузки включён на бэкенд-сервисе с локальной политикой балансировки нагрузки WEIGHTED_MAGLEV.
Прежде чем начать
- Ознакомьтесь с обзором балансировки внешней сетевой нагрузки на основе внутренних служб .
- Установите Google Cloud CLI. Полный обзор инструмента см. в обзоре gcloud CLI . Команды, связанные с балансировкой нагрузки, можно найти в справочнике по API и gcloud CLI . Если вы ранее не использовали Google Cloud CLI, сначала выполните команду gcloud init для аутентификации.
- Включить API вычислений.
gcloud services enable compute.googleapis.com
Примечание: Консоль Google Cloud нельзя использовать для настройки политики балансировки нагрузки локального уровня и назначения весов экземплярам виртуальных машин. Вместо этого используйте интерфейс командной строки Google Cloud.
Создание сети VPC, подсетей и правил брандмауэра
Создайте сеть VPC, подсеть и разрешите входные правила брандмауэра, чтобы разрешить подключения к внутренним виртуальным машинам вашего балансировщика нагрузки.
- Создайте сеть и подсеть VPC. а. Чтобы создать сеть VPC, выполните команду
gcloud compute networks create
:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
б. В этом примере основной диапазон IPv4-адресов подсети — 10.10.0.0/24
.
Чтобы создать подсеть, выполните команду gcloud compute networks subnets create
:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Заменить следующее:
-
NETWORK_NAME
: имя создаваемой сети VPC. -
SUBNET_NAME
: имя создаваемой подсети.
- Создайте правило брандмауэра, разрешающее входящий трафик, чтобы разрешить доставку пакетов, отправленных на TCP-порты назначения 80 и 443, на внутренние виртуальные машины. В этом примере правило брандмауэра разрешает подключения с любого исходного IP-адреса. Правило брандмауэра применяется к виртуальным машинам с сетевым тегом
network-lb-tag
. Чтобы создать правило брандмауэра, выполните командуgcloud 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
Замените FIREWALL_RULE_NAME
на имя правила брандмауэра, которое нужно создать.
Создание экземпляров виртуальных машин и назначение им весов
Создайте три экземпляра виртуальных машин и назначьте веса:
- Настройте три экземпляра бэкенд-виртуальных машин для возврата весовых коэффициентов в заголовке X-Load-Balancing-Endpoint-Weight с HTTP-ответами. В этом руководстве вы настроите один экземпляр бэкенда для возврата нулевого веса, второй — для возврата веса 100, а третий — для возврата веса 900. Чтобы создать экземпляры, выполните команду
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'
Создать группу экземпляров
В этом руководстве вы предоставите инструкции по созданию неуправляемой группы экземпляров, содержащей все три экземпляра виртуальных машин ( instance-0, instance-100, and instance-900
).
- Чтобы создать группу экземпляров, выполните команду
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
Замените INSTANCE_GROUP
на имя группы экземпляров, которую требуется создать.
Создать проверку работоспособности HTTP
В этом руководстве вы предоставите инструкции по созданию проверки работоспособности HTTP для чтения ответа HTTP, содержащего вес внутренней виртуальной машины.
- Чтобы создать проверку работоспособности HTTP, выполните команду
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Замените HTTP_HEALTH_CHECK_NAME
на имя проверки работоспособности HTTP, которую необходимо создать.
Создать внутреннюю службу
В следующем примере приведены инструкции по созданию региональной внешней внутренней службы, настроенной на использование взвешенной балансировки нагрузки .
- Создайте внутреннюю службу с проверкой работоспособности HTTP и установите политику балансировки нагрузки локальности на WEIGHTED_MAGLEV.
- Чтобы создать внутреннюю службу, выполните команду
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
- Замените
BACKEND_SERVICE_NAME
на имя создаваемой внутренней службы.
- Добавьте группу экземпляров в серверную службу.
- Чтобы добавить группу экземпляров, выполните команду
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
- Зарезервируйте региональный внешний IP-адрес для балансировщика нагрузки.
- Чтобы зарезервировать один или несколько IP-адресов, выполните команду
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Замените ADDRESS_NAME
на имя создаваемого IP-адреса. Используйте команду compute addresses describe
для просмотра результата. Обратите внимание на зарезервированный статический внешний IP-адрес (' IP_ADDRESS'
).
gcloud compute addresses describe ADDRESS_NAME
- Создайте правило переадресации, используя зарезервированный региональный внешний IP-адрес «IP_ADDRESS». Подключите правило переадресации к серверной службе.
- Чтобы создать правило пересылки, выполните команду
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
- Замените следующее:
FORWARDING_RULE
: имя создаваемого правила пересылки.IP_ADDRESS:
IP-адрес, назначаемый экземпляру. Используйте зарезервированный статический внешний IP-адрес, а не имя адреса.
Проверка внутренних весов с помощью API внутренних служб
Убедитесь, что внутренние веса правильно передаются в проверку работоспособности HTTP.
- Чтобы получить внутренние веса (вместе с состояниями работоспособности) из внутренней службы, выполните команду
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Вывод должен быть примерно следующим:
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