Создать балансировщик нагрузки
Панель управления
OpenStack CLI
Terraform
1. Выбрать конфигурацию и сеть
-
В панели управления перейдите в раздел Облачная платформа → Балансировщики.
-
Откройте вкладку Балансировщики.
-
Нажмите Создать балансировщик.
-
Выберите регион и пул, в котором будет создан балансировщик.
-
Выберите конфигурацию в зависимости от нагрузки на проект.
-
Введите имя балансировщика.
-
Опционально: введите комментарий — любую дополнительную информацию о балансировщике, она будет отображаться только в панели управления.
-
Выберите подсеть:
- приватную — балансировка трафика будет производиться только внутри подсети. Можно подключить публичный IP-адрес к приватному адресу — балансировщик будет доступен из интернета через NAT;
- или публичную — балансировщик будет доступен из интернета и сможет проксировать запросы из публичной подсети к облачным серверам в приватной подсети. Если вы будете размещать облачные серверы в этой же подсети, то выберите сеть размером от /28 или убедитесь, что в ней есть свободный IP-адрес для порта балансировщика нагрузки.
-
Укажите IP-адрес в подсети — свободный адрес, который будет назначен на балансировщик.
-
Опционально: подключите публичный IP-адрес. Если нет свободного публичного IP-адреса, создайте новый IP-адрес. Приватная подсеть, в которой вы создаете балансировщик, должна быть подготовлена для подключения публичного IP-адреса.
-
Нажмите Дальше.
2. Создать целевую группу
-
Откройте вкладку Серверы.
-
Опционально: чтобы изменить имя целевой группы, нажмите , введите имя и нажмите .
-
Выберите протокол назначения трафика, по которому балансировщик будет передавать трафик на целевую группу. Доступны следующие комбинации протоколов для приема трафика на балансировщике и назначения трафика на целевую группу:
- TCP–TCP — классическая L4-балансировка;
- TCP–PROXY — информация о клиенте не теряется и передается в отдельном заголовке соединения;
- UDP–UDP — UDP-протокол быстрее, чем TCP, но менее надежен;
- HTTP–HTTP — L7-балансировка;
- HTTPS–HTTP — L7-балансировка с шифрованием и терминацией SSL-сертификата на балансировщике.
-
Для выбранного протокола будет автоматически выбран стандартный порт — измените его при необходимости. Значение порта будет общим для всех серверов в группе.
-
Отметьте серверы, которые добавятся в целевую группу.
-
Укажите настройки для каждого отмеченного сервера:
6.1. Выберите IP-адрес.
6.2. Опционально: измените порт.
6.3. Укажите вес сервера — это пропорциональная мера, обозначает долю запросов, которую обрабатывает сервер. Если значения весов одинаковые, то серверы обслуживают равное количество запросов. Если, например, в группе один сервер с весом «2» и два сервера с весом «1», то первый сервер получит 50% всех запросов, а другие два — по 25%. Максимальное значение веса — 256.
6.4. Опционально: чтобы направлять трафик на сервер только при недоступности остальных серверов в группе, отметьте чекбокс Резервный.
-
Откройте вкладку Алгоритм.
-
Выберите алгоритм распределения запросов — Round Robin или Least connections.
-
Опционально: чтобы включить метод Sticky Sessions, отметьте чекбокс Sticky sessions и выберите идентификатор сессии. Для идентификатора APP-cookie введите имя cookie.
-
Откройте вкладку Проверки доступности.
-
Выберите тип проверки доступности. После создания группы тип проверки изменить нельзя.
-
Если выбран тип проверки HTTP, укажите параметры запроса — метод, путь и ожидаемые коды ответа.
-
Укажите интервал между проверками — интервал в секундах, с которым балансировщик отправляет проверяющие запросы серверам.
-
Укажите таймаут соединения — максимальное время ожидания ответа в секундах, должно быть меньше интервала между проверками.
-
Укажите порог успеха — количество успешных обращений подряд, после которых сервер переводится в рабочее состояние.
-
Укажите порог неуспеха — количество неуспешных обращений подряд, после которых ра бота сервера приостанавливается.
-
Опционально: чтобы добавить еще одну целевую группу, нажмите Добавить целевую группу и настройте ее.
-
Нажмите Дальше.
3. Создать правила и HTTP-политики
- Выберите протокол приема трафика на балансировщике — TCP, UDP, HTTP или HTTPS. Доступен также вариант Prometheus для настройки мониторинга балансировщика нагрузки.
TCP- или UDP-трафик
HTTP- или HTTPS-трафик
-
Для выбранного протокола будет автоматически выбран стандартный порт, на котором балансировщик будет слушать трафик, — измените его при необходимости.
-
Выберите целевую группу. Доступны группы, на которые можно балансировать трафик по выбранному протоколу приема трафика.
-
Опционально: разверните блок Расширенные настройки правила и укажите настройки соединений:
- для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
- для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Опционально: чтобы добавить еще одно правило, нажмите Добавить правило и перейдите на шаг 1. Количество правил не ограничено.
-
Проверьте итоговую стоимость балансировщика.
-
Нажмите Создать балансировщик.
-
Для выбранного протокола будет автоматически выбран стандартный порт, на котором балансировщик будет слушать трафик, — измените его при необходимости.
-
Если вы выбрали HTTPS-протокол, выберите сертификат для терминации HTTPS-трафика на балансировщике — выберите сертификат из менеджера секретов или загрузите новый. Подробнее в инструкции TLS(SSL)-сертификаты балансировщика нагрузки.
-
Опционально: отметьте заголовки HTTP-запросов, которые будут передаваться серверам.
-
Выберите целевую группу по умолчанию — туда будет направляться трафик, который не попал под HTTP-политику.
-
Создайте HTTP-политики.
-
Опционально: измените настройки соединений, для этого откройте блок Расширенные настройки правила и укажите:
- для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
- для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Опционально: чтобы добавить еще одно правило, нажмите Добавить правило и перейдите на шаг 1. Количество правил не ограничено.
-
Проверьте цену балансировщика.
-
Нажмите Создать балансировщик.
Создать балансировщик
-
Установите компонент Octavia для работы с облачными балансировщиками нагрузки — для совместимости с версией релиза Yoga требуется версия 3.4.0:
pip3 install python-octaviaclient===3.4.0
-
Создайте балансировщик нагрузки:
openstack loadbalancer create \
--vip-subnet-id <subnet_uuid> \
--vip-address <loadbalancer_ip_address> \
--flavor <flavor> \
--name <loadbalancer_name>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети, можно посмотреть с помощьюopenstack subnet list
;<loadbalancer_ip_address>
— IP-адрес, который выделится для балансировщика нагрузки — один из свободных в подсети;<flavor>
— ID или имя флейвора. Флейворы соответствуют типам балансировщика нагрузки и определяют количество vCPU, RAM и количество инстансов балансировщика. Например,ac18763b-1fc5-457d-9fa7-b0d339ffb336
— ID для создания балансировщика с типом Продвинутый с резервированием в пуле ru-9. Список флейворов можно посмотреть с помощьюopenstack loadbalancer flavor list -c id -c name
или в таблице Список флейворов балансировщика нагрузки во всех пулах;<loadbalancer_name>
— имя балансировщика.
-
Проверьте, что балансировщик находится в статусах
ONLINE
(параметрoperating_status
в выводе команды) иACTIVE
(provisioning_status
):openstack loadbalancer show <loadbalancer>
Укажите
<loadbalancer>
— ID или имя балансировщика, список можно посмотреть с помощьюopenstack loadbalancer list
-
Опционально: если на шаге 3 вы указали приватную подсеть, подключите публичный IP-адрес к балансировщику:
openstack floating ip set --port <loadbalancer_port_uuid> <floating_ip>
Укажите:
<loadbalancer_port_uuid>
— ID порта балансировщика, можно посмотреть с помощьюopenstack loadbalancer show <loadbalancer>
, значениеvip_port_id
;<floating_ip>
— публичный IP-адрес.
Создать правило, HTTP-политику и целевую группу
Для TCP- или UDP-трафика
Для HTTP- или HTTPS-трафика
-
Создайте правило:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol <protocol> \
--protocol-port <port> \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<protocol>
— название протокола:TCP
илиUDP
;<port>
— номер порта на балансировщике.
-
Создайте целевую группу:
openstack loadbalancer pool create \
--name <pool_name> \
--lb-algorithm <algorithm> \
--listener <listener_name> \
--protocol <protocol>Укажите:
-
Добавьте сервер в целевую группу:
openstack loadbalancer member create \
--subnet-id <subnet_uuid> \
--address <server_ip_address> \
--protocol-port <port> \
<pool_name>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети сервера, можно посмотреть с помощьюopenstack subnet list
;<server_ip_address>
— IP-адрес сервера из указанной подсети;<port>
— номер порта на сервере;<pool_name>
— имя целевой группы, которую вы создали на шаге 2.
-
Опционально: создайте проверку доступности для целевой группы:
openstack loadbalancer healthmonitor create \
--delay <delay> \
--timeout <timeout> \
--max-retries <max_retries> \
--max-retries-down <max_retries_down> \
--type <type> \
--http-method <http_method> \
--url-path <url_path> \
--expected-codes <codes> \
<pool_name>Укажите:
-
<delay>
— интервал между проверками в секундах; -
<timeout>
— максимальное время ожидания ответа в секундах; -
<max_retries>
— количество успешных обращений подряд, после которых сервер переводится в рабочее состояние; -
<max_retries_down>
— количество неуспешных обращений подряд, после которых работа сервера приостанавливается; -
<type>
— тип проверки. Доступные типы зависят от протокола целевой группы, который вы указали на шаге 2:- для протокола
TCP
— типPING
,TCP
; - для протокола
UDP
— типUDP_CONNECT
,PING
; - для протокола
PROXY
— типTLS_HELLO
,HTTP
,PING
,TCP
;
- для протокола
-
параметры HTTP-запроса, если выбрали тип проверки
HTTP
:--http-method <http_method>
— метод проверки:GET
,POST
,DELETE
,PUT
,HEAD
,OPTIONS
,PATCH
,CONNECT
,TRACE
;--url-path <url_path>
— путь запроса без доменного имени;--expected-codes <codes>
— ожидаемые коды ответа через запятую;<pool_name>
— имя целевой группы, которую вы создали на шаге 2.
-
-
Создайте целевую группу, которая будет служить группой по умолчанию — туда будет направляться трафик, не попавший под HTTP-политики в правиле:
openstack loadbalancer pool create \
--name <pool_name> \
--lb-algorithm <algorithm> \
--protocol HTTP \
--loadbalancer <load_balancer>Укажите:
<pool_name>
— имя целевой группы;<algorithm>
— название алгоритма:ROUND_ROBIN
илиLEAST_CONNECTIONS
;<load_balancer>
— ID или имя балансировщика, который вы создали ранее, список можно посмотреть с помощьюopenstack loadbalancer list
-
Добавьте сервер в целевую группу:
openstack loadbalancer member create \
--subnet-id <subnet_uuid> \
--address <server_ip_address> \
--protocol-port <port> \
<pool_name>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети сервера, можно посмотреть с помощьюopenstack subnet list
;<server_ip_address>
— IP-адрес сервера из указанной подсети;<port>
— номер порта на сервере;<pool_name>
— имя целевой группы, которую вы создали на шаге 1.
-
Опционально: создайте проверку доступности для целевой группы:
openstack loadbalancer healthmonitor create \
--delay <delay> \
--timeout <timeout> \
--max-retries <max_retries> \
--max-retries-down <max_retries_down> \
--type <type> \
--http-method <http_method> \
--url-path <url_path> \
--expected-codes <codes> \
<pool_name>Укажите:
-
<delay>
— интервал между проверками в секундах; -
<timeout>
— максимальное время ожидания ответа в секундах; -
<max_retries>
— количество успешных обращений подряд, после которых сервер переводится в рабочее состояние; -
<max_retries_down>
— количество неуспешных обращений подряд, после которых работа сервера приостанавливается; -
<type>
— тип проверки:HTTP
,PING
,TCP
; -
параметры HTTP-запроса, если выбрали тип проверки
HTTP
:--http-method <http_method>
— метод проверки:GET
,POST
,DELETE
,PUT
,HEAD
,OPTIONS
,PATCH
,CONNECT
,TRACE
;--url-path <url_path>
— путь запроса без доменного имени;--expected-codes <codes>
— ожидаемые коды ответа через запятую;<pool_name>
— имя целевой группы, которую вы создали на шаге 1.
-
-
Создайте правило:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol <protocol> \
--protocol-port <port> \
--default-tls-container=<certificate_uuid> \
--default-pool <default_pool> \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<protocol>
— название протокола:HTTP
илиTERMINATED_HTTPS
;<port>
— номер порта на балансировщике;--default-tls-container=<certificate_uuid>
— ID TLS(SSL)-сертификата для терминации HTTPS-трафика на балансировщике. Укажите, если выбрали протоколTERMINATED_HTTPS
. Можно скопировать в панели управления: в разделе Облачная платформа → Менеджер секретов → вкладка Сертификаты → в меню сертификата выберите Скопировать UUID. Подробнее о TLS(SSL)-сертификатах балансировщика нагрузки;<default_pool>
— ID или имя целевой группы по умолчанию, которую вы создали на шаге 1, список можно посмотреть с помощьюopenstack loadbalancer pool list
-
Создайте HTTP-политику в правиле:
openstack loadbalancer l7policy create \
--action <action> \
[--redirect-url <url> | --redirect-prefix <prefix_url> | --redirect-pool <pool> ]
--position <position> \
--name <policy_name> \
<listener>Укажите:
-
<action>
— действие для балансировки трафика:REDIRECT_TO_URL
— полностью заменять URL запроса, включая протокол, доменное имя, путь и параметры;REDIRECT_PREFIX
— заменять протокол и доменное имя в URL запроса;REDIRECT_TO_POOL
— направлять на целевую группу;REJECT
— отклонять;
-
куда нужно направить трафик:
--redirect-url <url>
— полный URL для перенаправления. Укажите, если выбрано действиеREDIRECT_TO_URL
;--redirect-prefix <prefix_url>
— префикс URL, на который нужно заменить протокол и домен в запросе, напримерhttps://example.com
. Укажите, если выбра но действиеREDIRECT_PREFIX
;--redirect-pool <pool>
— ID или имя целевой группы. Укажите, если выбрано действиеREDIRECT_TO_POOL
. Список можно посмотреть с помощьюopenstack loadbalancer pool list
. Если у вас еще нет целевой группы, создайте ее;
-
--position <position>
— позиция политики в правиле. Укажите, если в правиле будет несколько политик с одинаковым действием, политика с позицией1
применится первой из них; -
<policy_name>
— имя L7-политики; -
<listener>
— ID или имя правила, которое вы создали на шаге 4. Список можно посмотреть с помощьюopenstack loadbalancer listener list
-
-
Создайте условие в HTTP-политике:
openstack loadbalancer l7rule create \
--compare-type <compare_type> \
--type <type> \
--value <value> \
<policy>Укажите:
-
<compare_type>
— тип совпадения с контрольным значением:EQUAL TO
— совпадает;STARTS WITH
— начинается с;ENDS WITH
— заканчивается на;CONTAINS
— содержит;REGEX
— регулярное выражение;
-
<type>
— параметр в запросе для проверки:HOST_NAME
,PATH
,COOKIE
,FILE_TYPE
,HEADER
; -
<value>
— контрольное значение; -
<policy>
— ID или имя L7-политики, которую вы создали на шаге 5.
-
Используйте инструкции в документации Terraform: