Создать балансировщик нагрузки
Панель управления
OpenStack CLI
Terraform
1. Выбрать конфигурацию и сеть
-
В панели управления в верхнем меню нажмите Продукты и выберите Облачные серверы.
-
Перейдите в раздел Балансировщики → вкладка Балансировщики.
-
Нажмите Создать балансировщик.
-
Выберите регион и пул, в котором будет создан балансировщик.
-
Выберите конфигурацию в зависимости от нагрузки на проект.
-
Введите имя балансировщика.
-
Опционально: введите комментарий — любую дополнительную информацию о балансировщике, она будет отображаться только в панели управления.
-
Опционально: чтобы иметь доступ к логам балансировщика, включите логирование. Логирование использует часть вычислительных ресурсов балансировщика.
8.1. Отметьте чекбокс Собирать технические логи балансировщика.
8.2. Выберите группу логов или создайте новую группу.
8.3. Если вы выбрали новую группу, введите ее имя.
-
Выберите подсеть:
- приватную — балансировка трафика будет производиться только внутри подсети. Можно подключить публичный 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-трафик
-
Для выбранного протокола будет автоматически выбран стандартный порт, на котором балансировщик будет слушать трафик, — измените его при необходимости.
-
Опционально: введите разрешенные CIDR — IP-адреса, с которых балансировщик будет принимать трафик с выбранным протоколом и портом. Можно ввести подсеть в формате CIDR или одиночный IP-адрес с маской
/32
. Если вы оставите поле пустым, балансировщик будет принимать трафик с любых IP-адресов. Вы можете указать разрешенные IP-адреса в правиле после создания балансировщика.Если поле отсутствует, в сети балансировщика выключена фильтрация трафика (port security).
-
Выберите целевую группу. Доступны группы, на которые можно балансировать трафик по выбранному протоколу приема трафика.
-
Опционально: разверните блок Расширенные настройки правила и укажите настройки соединений:
- для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
- для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Опционально: чтобы добавить еще одно правило, нажмите Добавить правило и повторите шаги 1-5. Количество правил не ограничено.
-
Проверьте итоговую стоимость балансировщик а.
-
Нажмите Создать балансировщик.
-
Для выбранного протокола будет автоматически выбран стандартный порт, на котором балансировщик будет слушать трафик, — измените его при необходимости.
-
Если вы выбрали HTTPS-протокол, выберите сертификат для терминации HTTPS-трафика на балансировщике — выберите сертификат из менеджера секретов или загрузите новый. Подробнее в инструкции TLS(SSL)-сертификаты балансировщика нагрузки.
-
Опционально: чтобы ограничить доступ к балансировщику, введите разрешенные CIDR — IP-адреса, с которых балансировщик будет принимать трафик с выбранным протоколом и портом. Можно ввести подсеть в формате CIDR или одиночный IP-адрес с маской
/32
. Если вы оставите поле пустым, балансировщик будет принимать трафик с любых IP-адресов. Вы можете указать разрешенные IP-адреса в правиле после создания балансировщика.Если поле отсутствует, в сети балансировщика выключена фильтрация трафика (port security).
-
Опционально: отметьте заголовки HTTP-запросов, которые будут передаваться серверам.
-
Выберите целевую группу по умолчанию — туда будет направляться трафик, который не попал под HTTP-политику.
-
Создайте HTTP-политики.
-
Опционально: измените настройки соединений, для этого откройте блок Расширенные настройки правила и укажите:
- для входящих запросов на балансировщик — укажите таймаут соединения и максимум соединений;
- для запросов от балансировщика к серверам — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Опционально: чтобы добавить еще одно правило, нажмите Добавить правило и повторите шаги 1-8. Количество правил не ограничено.
-
Проверьте итоговую стоимость балансировщика.
-
Нажмите Создать балансировщик.
Создать балансировщик
-
Установите компонент 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> \
[--allowed-cidr <allowed_cidr>] \
<loadbalancer>Укажите:
<listener_name>
— имя правила;<protocol>
— название протокола:TCP
илиUDP
;<port>
— номер порта на балансировщике;- опционально:
--allowed-cidr <allowed_cidr>
— IP-адрес, с которого разрешено принимать трафик, где<allowed_cidr>
— подсеть в формате CIDR или одиночный IP-адрес с маской/32
. Если нужно указать несколько адресов, каждый укажите в отдельном параметре--allowed-cidr
. Чтобы ограничение работало, в сети балансировщика должна быть включена фильтрация трафика (port security). Вы можете указать разрешенные IP-адреса в правиле после создания балансировщика; <loadbalancer>
— ID или имя балансировщика нагрузки. Список можно посмотреть с помощью командыopenstack loadbalancer list
.
-
Создайте целевую группу:
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 <loadbalancer>Укажите:
<pool_name>
— имя целевой группы;<algorithm>
— название алгоритма:ROUND_ROBIN
илиLEAST_CONNECTIONS
;<loadbalancer>
— 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> \
[--allowed-cidr <allowed_cidr>]
--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
;- опционально:
--allowed-cidr <allowed_cidr>
— IP-адрес, с которого разрешено принимать трафик, где<allowed_cidr>
— подсеть в формате CIDR или одиночный IP-адрес с маской/32
. Если нужно указать несколько адресов, каждый укажите в отдельном параметре--allowed-cidr
. Чтобы ограничение работало, в сети балансировщика должна быть включена фильтрация трафика (port security). Вы можете указать разрешенные IP-адреса в правиле после создания балансировщика.
-
Создайте 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: