1. Введение
Вы можете настроить балансировщик сетевой нагрузки для распределения трафика между серверными экземплярами балансировщика нагрузки на основе весов, сообщаемых проверкой работоспособности HTTP с использованием взвешенной балансировки нагрузки.
Для взвешенной балансировки нагрузки необходимо настроить оба следующих параметра:
- Необходимо установить для политики балансировки нагрузки локальности (localityLbPolicy) внутренней службы значение WEIGHTED_MAGLEV.
- Необходимо настроить серверную службу с проверкой работоспособности HTTP/HTTP2/HTTPS. Ответы проверки работоспособности HTTP должны содержать настраиваемое поле заголовка ответа HTTP X-Load-Balancing-Endpoint-Weight, чтобы указать веса с целочисленными значениями от 0 до 1000 в десятичном представлении для каждого экземпляра серверной части.
Если вы используете одну и ту же группу экземпляров в качестве серверной части для нескольких балансировщиков сетевой нагрузки на основе серверной службы, использующих взвешенную балансировку нагрузки, рекомендуется использовать уникальный путь запроса для каждой проверки работоспособности серверной службы. Дополнительные сведения см. в разделе Критерии успеха для проверок работоспособности HTTP, HTTPS и HTTP/2 .
Проверка работоспособности HTTP должна вернуть ответ HTTP 200 (ОК), чтобы проверки прошли успешно и экземпляр серверной части считался исправным. В ситуациях, когда все серверные экземпляры проходят проверки работоспособности и возвращают 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. Полный обзор инструмента см. в обзоре CLI gcloud . Команды, связанные с балансировкой нагрузки, вы можете найти в справочнике по API и Gcloud CLI . Если вы ранее не запускали Google Cloud CLI, сначала запустите gcloud init для аутентификации.
- Включите вычислительный API.
gcloud services enable compute.googleapis.com
Примечание. Вы не можете использовать консоль Google Cloud для настройки политики балансировки нагрузки локальности и назначения весов экземплярам виртуальных машин. Вместо этого используйте Google Cloud CLI.
Создание сети 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