1. Введение
Добро пожаловать в кодовую лабораторию расширенной оптимизации балансировки нагрузки!
В этой лабораторной работе вы узнаете, как настроить расширенные параметры балансировки нагрузки для глобального балансировщика нагрузки внешнего приложения. Прежде чем начать, рекомендуется сначала ознакомиться с документом о балансировке нагрузки в облаке ( https://cloud.google.com/load-balancing/docs/load-balancing-overview ).
Рисунок 1. Рабочий процесс выбора конечной точки назначения с помощью глобального балансировщика нагрузки внешнего приложения.
Топология Codelab и варианты использования
Рисунок 2 . Топология маршрутизации HTTP Load Balancer
В ходе этой лабораторной работы по коду вы настроите две группы управляемых экземпляров. Вы создадите глобальный внешний балансировщик нагрузки https. Балансировщик нагрузки будет использовать несколько функций из списка расширенных возможностей, которые поддерживает балансировщик нагрузки на основе посланника. После развертывания вы сгенерируете симулированную нагрузку и убедитесь, что установленные вами конфигурации работают должным образом.
Что вы узнаете
- Как настроить ServiceLbPolicy для точной настройки балансировщика нагрузки.
Что вам понадобится
- Знание внешней балансировки нагрузки HTTPS. Первая половина этой кодовой лаборатории очень похожа на внешнюю HTTPs LB с расширенным управлением трафиком (Envoy) Codelab ( 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_Address>.
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-VM
Теперь вы создадите siege-vm, который будете использовать для генерации нагрузки.
Из 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
Проверьте распределение нагрузки
Теперь, когда Siege запущен, пришло время проверить, что трафик равномерно распределяется между двумя управляемыми группами экземпляров.
Остановить осаду
Теперь, когда вы продемонстрировали, что расширенное разделение трафика работает, пришло время прекратить осаду. Для этого вернитесь к SSH-терминалу siege-vm и нажмите CTRL+C, чтобы остановить выполнение осады.
7. Настройте политику обслуживания Lb
Создайте политику сервисного LB
Теперь, когда базовая настройка выполнена, мы создадим политику Service Lb и опробуем расширенные функции. В качестве примера мы настроим службу на использование некоторых расширенных настроек балансировки нагрузки. В этом примере мы просто собираемся создать политику для использования функции автоматического слива емкости. Но не стесняйтесь попробовать другие функции.
Из 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
Прикрепите политику Service LB к серверной службе
Теперь мы прикрепим новую политику к вашей существующей серверной службе, указанной выше.
Из Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. Настройте здоровье серверной части
На этом этапе новая политика Service lb была применена к вашей серверной службе. Так что технически вы можете сразу перейти к очистке. Но в рамках разработки кода мы также внесем некоторые дополнительные изменения, чтобы показать вам, как работает новая политика.
Функция автоматического слива емкости автоматически удалит серверную MIG из балансировщика нагрузки, когда общее количество работоспособных серверных частей упадет ниже определенного порога (25%). Чтобы протестировать эту функцию, мы собираемся подключиться по SSH к виртуальным машинам в us-east1-b-mig и сделать их неработоспособными. При пороге 25 % вам потребуется подключиться по SSH к четырем виртуальным машинам и выключить сервер Apache.
Для этого выберите четыре виртуальные машины и подключите к ним SSH, щелкнув SSH, чтобы запустить терминал и подключиться. Затем выполните следующую команду.
sudo apachectl stop
На этом этапе будет активирована функция автоматического сброса емкости, и us-east1-b-mig не будет получать новые запросы.
9. Убедитесь, что функция автоматического сливания емкости работает.
Перезапустите осаду
Чтобы проверить новую функцию, мы снова будем использовать осадную виртуальную машину. Давайте подключимся по 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. Поздравляем!
Поздравляем с завершением работы над кодом.
Что мы рассмотрели
- Создание внешнего балансировщика нагрузки приложений с политикой Service lb.
- Настройте свою серверную службу с помощью функции автоматического истощения емкости.
Следующие шаги
- Попробуйте другие функции, предоставляемые политикой Service lb.