1. Введение
Добро пожаловать на практическое занятие по оптимизации балансировки нагрузки!
В этом практическом занятии вы узнаете, как настроить расширенные параметры балансировки нагрузки для глобального внешнего балансировщика нагрузки приложений. Перед началом работы рекомендуется ознакомиться с документацией по облачной балансировке нагрузки ( https://cloud.google.com/load-balancing/docs/load-balancing-overview ).

Рисунок 1. Схема выбора конечной точки назначения с помощью глобального внешнего балансировщика нагрузки приложений.
Топология и примеры использования Codelab

Рисунок 2. Топология маршрутизации балансировщика нагрузки HTTP.
В ходе этой практической работы вы настроите две группы управляемых экземпляров. Вы создадите глобальный внешний балансировщик нагрузки HTTPS. Балансировщик нагрузки будет использовать несколько функций из списка расширенных возможностей, поддерживаемых балансировщиком нагрузки на основе Envoy. После развертывания вы сгенерируете имитационную нагрузку и проверите, правильно ли работают заданные вами конфигурации.
Что вы узнаете
- Как настроить ServiceLbPolicy для точной оптимизации балансировщика нагрузки.
Что вам понадобится
- Знание принципов балансировки нагрузки по внешнему HTTPS-протоколу. Первая половина этого практического занятия очень похожа на практическое занятие по балансировке нагрузки по внешнему HTTPS-протоколу с расширенным управлением трафиком (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv ). Рекомендуется сначала ознакомиться с ним.
2. Прежде чем начать
Внутри Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
Включить API
Включите все необходимые службы
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. Создайте сеть VPC.
Создайте сеть VPC.
Из Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
Создание правил брандмауэра VPC
После создания VPC необходимо создать правило брандмауэра. Это правило будет использоваться для разрешения доступа всех IP-адресов к внешнему IP-адресу веб-сайта тестового приложения через порт 80 для HTTP-трафика.
Из Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
Выход
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
В этом практическом занятии мы настроим работоспособность виртуальных машин. Для этого мы также создадим правила брандмауэра, разрешающие SSH-подключение.
Из Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Выход
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. Настройте группы управляемых экземпляров.
Необходимо настроить группы управляемых экземпляров, которые включают шаблоны для ресурсов бэкэнда, используемых балансировщиком нагрузки HTTP. Сначала мы создадим шаблоны экземпляров, которые определяют конфигурацию виртуальных машин, создаваемых для каждого региона. Затем для бэкэнда в каждом регионе мы создадим группу управляемых экземпляров, которая будет ссылаться на шаблон экземпляра.
Группы управляемых экземпляров могут иметь зональный или региональный охват. В рамках этого практического задания мы будем создавать зональные группы управляемых экземпляров.
В этом разделе вы можете увидеть предварительно созданный скрипт запуска, который будет использоваться при создании экземпляра. Этот скрипт запуска устанавливает и включает возможности веб-сервера, которые мы будем использовать для имитации веб-приложения. Можете свободно изучить этот скрипт.
Создайте шаблоны экземпляров.
Первый шаг — создание шаблона экземпляра.
Из Cloud Shell
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
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
systemctl restart apache2'
Выход
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Теперь вы можете убедиться в успешном создании шаблонов экземпляров с помощью следующей команды gcloud:
Из Cloud Shell
gcloud compute instance-templates list
Выход
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Создайте группы экземпляров.
Теперь нам необходимо создать управляемую группу экземпляров на основе шаблонов экземпляров, созданных нами ранее.
Из Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
Из Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
Мы можем убедиться в успешном создании групп экземпляров с помощью следующей команды gcloud:
Из Cloud Shell
gcloud compute instance-groups list
Выход
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
Проверьте работоспособность веб-сервера.
Каждый экземпляр настроен на запуск веб-сервера Apache с простым PHP-скриптом, который отображает примерно следующее:
Страница предоставлена с сайта: us-east1-a-mig-ww2h
Чтобы убедиться в корректной работе веб-серверов, перейдите в Compute Engine -> Экземпляры виртуальных машин. Убедитесь, что ваши новые экземпляры (например, us-east1-a-mig-xxx) созданы в соответствии с определениями групп экземпляров.
Теперь отправьте веб-запрос в браузере, чтобы убедиться, что веб-сервер запущен (запуск может занять минуту). На странице экземпляров виртуальных машин в разделе Compute Engine выберите экземпляр, созданный вашей группой экземпляров, и щелкните его внешний (публичный) IP-адрес.
Или же в браузере перейдите по адресу http://<IP_адрес>
5. Настройка балансировщика нагрузки
Создать проверку здоровья
Для начала нам необходимо провести базовую проверку работоспособности, чтобы убедиться в успешной работе наших сервисов. Мы проведем именно базовую проверку, но доступны и более сложные настройки.
Из Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Зарезервировать внешний IP-адрес
На этом этапе вам потребуется зарезервировать глобально доступный статический IP-адрес, который впоследствии будет привязан к балансировщику нагрузки.
Из Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Обязательно запишите зарезервированный IP-адрес.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Создание серверных служб
Теперь нам необходимо создать серверную службу для групп управляемых экземпляров, которые мы создали ранее.
Из Cloud Shell
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
Добавить MIG в бэкэнд-сервисы
Теперь, когда мы создали серверные службы, нам необходимо добавить созданные ранее группы управляемых экземпляров к каждой из этих служб.
Из Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Из Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Проверить добавление бэкэндов можно, выполнив следующую команду.
Из Cloud Shell
gcloud compute backend-services list
Выход
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
Создать карту URL
Теперь мы создадим карту URL-адресов.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
Создание HTTP-интерфейса
Последний шаг в создании балансировщика нагрузки — создание интерфейса. Он сопоставит зарезервированный вами ранее IP-адрес с созданной вами картой URL-адресов балансировщика нагрузки.
Из Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
Далее необходимо создать глобальное правило переадресации, которое будет сопоставлять ранее зарезервированный IP-адрес с HTTP-прокси.
Из Cloud Shell
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
На этом этапе вы можете убедиться, что балансировщик нагрузки работает с IP-адресом, который вы записали ранее.
6. Убедитесь, что балансировщик нагрузки работает.
Для проверки работоспособности функции балансировки нагрузки необходимо создать некоторую нагрузку. Для этого мы создадим новую виртуальную машину для имитации нагрузки.
Создать виртуальную машину Siege
Теперь вы создадите виртуальную машину siege, которую будете использовать для генерации нагрузки.
Из Cloud Shell
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
Выход
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
Далее вы можете подключиться к созданной виртуальной машине по SSH. После создания виртуальной машины нажмите SSH, чтобы запустить терминал и подключиться.
После подключения выполните следующую команду для создания нагрузки. Используйте IP-адрес, который вы зарезервировали ранее для внешнего балансировщика нагрузки HTTP.
Из Cloud Shell
siege -c 20 http://$lb-ipv4-2
Выход
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Проверка распределения нагрузки
Теперь, когда операция "Осада" запущена, пора проверить, равномерно ли распределяется трафик между двумя группами управляемых экземпляров.
Остановите осаду
Теперь, когда вы продемонстрировали работоспособность расширенного разделения трафика, пришло время остановить осаду. Для этого вернитесь в SSH-терминал виртуальной машины siege-vm и нажмите CTRL+C, чтобы остановить запущенную осаду.
7. Настройка политики балансировки нагрузки службы.
Создайте политику балансировки нагрузки службы.
Теперь, когда базовая настройка завершена, мы создадим политику балансировки нагрузки для сервиса и протестируем расширенные функции. В качестве примера мы настроим сервис для использования некоторых расширенных параметров балансировки нагрузки. В этом примере мы просто создадим политику для проверки функции автоматического оттока ресурсов. Но вы можете попробовать и другие функции.
Из Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Мы можем убедиться в успешном создании политики с помощью следующей команды gcloud:
Из Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Выход
NAME http-policy
Прикрепить политику балансировки нагрузки к серверной службе
Теперь мы привяжем новую политику к вашей существующей серверной службе, указанной выше.
Из Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Настройка работоспособности бэкэнда.
На этом этапе новая политика балансировки нагрузки сервиса уже применена к вашему бэкэнд-сервису. Поэтому технически вы можете сразу перейти к очистке. Но в рамках практического занятия мы также внесем некоторые дополнительные изменения в рабочую среду, чтобы показать вам, как работает новая политика.
Функция автоматического отключения ресурсов автоматически удаляет бэкэнд MIG из балансировщика нагрузки, когда общее количество работоспособных бэкэндов падает ниже определенного порогового значения (25%). Чтобы протестировать эту функцию, мы подключимся по SSH к виртуальным машинам в us-east1-b-mig и переведем их в неработоспособное состояние. При достижении порога в 25% вам потребуется подключиться по SSH к четырем виртуальным машинам и выключить сервер Apache.
Для этого выберите четыре виртуальные машины и подключитесь к ним по SSH, нажав кнопку SSH для запуска терминала и установления соединения. Затем выполните следующую команду.
sudo apachectl stop
В этот момент будет активирована функция автоматического истощения пропускной способности, и us-east1-b-mig не будет получать новые запросы.
9. Убедитесь, что функция автоматического слива жидкости работает.
Возобновить осаду
Чтобы проверить новую функцию, мы снова воспользуемся виртуальной машиной Siege. Давайте подключимся по SSH к виртуальной машине, созданной на предыдущем шаге. После создания нажмите SSH, чтобы запустить терминал и подключиться.
После подключения выполните следующую команду для создания нагрузки. Используйте IP-адрес, который вы зарезервировали ранее для внешнего балансировщика нагрузки HTTP.
Из Cloud Shell
siege -c 20 http://$lb-ipv4-2
Выход
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
На этом этапе вы заметите, что все запросы отправляются на адрес us-east1-a-mig.
Остановите осаду
Теперь, когда вы продемонстрировали работоспособность расширенного разделения трафика, пришло время остановить осаду. Для этого вернитесь в SSH-терминал виртуальной машины siege-vm и нажмите CTRL+C, чтобы остановить запущенную осаду.
10. Этапы очистки
Теперь, когда мы закончили с лабораторной средой, пришло время её удалить. Пожалуйста, выполните следующие команды, чтобы удалить тестовую среду.
Из Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. Поздравляем!
Поздравляем с завершением практического занятия!
Что мы рассмотрели
- Создание внешнего балансировщика нагрузки приложений с политикой балансировки нагрузки служб.
- Настройте свою серверную службу с функцией автоматического сброса лимита ресурсов.
Следующие шаги
- Попробуйте другие функции, предоставляемые политикой сервисного обслуживания LB.