Создать балансировщик нагрузки
- Панель управления
- OpenStack CLI
- Terraform
-
В панели управления перейдите в раздел Облачная платформа → Балансировщики.
-
Нажмите Создать балансировщик.
-
Введите имя балансировщика.
-
Выберите регион и пул.
-
Выберите тип балансировщика в зависимости от нагрузки на проект.
-
Выберите подсеть:
- приватную — балансировка трафика будет производиться только внутри подсети. Можно подключить публичный IP-адрес к приватному адресу — балансировщик будет доступен из интернета через NAT;
- или публичную — балансировщик будет доступен из интернета и сможет проксировать запросы из публичной подсети к облачным серверам в приватной подсети. Если вы будете размещать облачные серверы в этой же подсети, то выберите сеть размером от /28 или убедитесь, что в ней выделен свободный порт — подробнее о том, какое количество портов использует балансировщик.
-
Укажите IP-адрес балансировщика — один из свободных адресов в подсети.
-
Опционально: подключите публичный IP-адрес. Если нет свободного публичного IP-адреса, создайте новый IP-адрес. Приватная подсеть, в которой вы создаете балансировщик, должна быть подключена к облачному роутеру с доступом к внешней сети.
-
Настройте правило балансировщика нагрузки. Укажите протокол для балансировщика и облачного сервера:
- TCP–TCP — классическая L4-балансировка;
- TCP–PROXY — информация о клиенте не теряется и передается в отдельном заголовке соединения;
- UDP–UDP — UDP-протокол быстрее, чем TCP, но менее надежен;
- HTTP–HTTP — L7-балансировка;
- HTTPS–HTTP — L7-балансировка с шифрованием и терминацией SSL-сертификата на балансировщике.
-
Для выбранного протокола будет автоматически выбран стандартный порт — измените его при необходимости. Значение порта будет общим для всех серверов в правиле.
-
Если вы выбрали HTTPS-протокол, добавьте в правило SSL-сертификат — так балансировщик сможет прочитать HTTPS-запрос и использовать информацию протокола HTTP для правильной балансировки. Терминация SSL-сертификата происходит на балансировщике, балансировщик передает данные серверам по HTTP.
Выберите сертификат из менеджера секретов или загрузите новый.
Сертификаты с пустым полем
CN
(Common Name) не поддерживаются в балансировщиках нагрузки. -
Откройте вкладку Серверы и отметьте серверы, которые добавятся в правило.
Для каждого сервера выберите IP-адрес и введите порт.
Укажите вес сервера — это пропорциональная мера, обозначает долю запросов, которую обрабатывает сервер. Если значения весов одинаковые, то серверы обслуживают равное количество запросов. Если, например, в правиле один сервер с весом «2» и два сервера с весом «1», то первый сервер получит 50% всех запросов, а другие два — по 25%. Максимальное значение веса — 256.
-
Откройте вкладку Алгоритм и выберите алгоритм распределения запросов — Round Robin или Least connections. Опционально: чтобы включить метод Sticky Sessions, отметьте чекбокс Sticky sessions.
-
Откройте вкладку Проверки и настройте проверки доступности.
-
Откройте вкладку Соединения и укажите настройки соединения между:
- входящими запросами и балансировщиком — укажите таймаут соединения, а также ограничено или нет количество соединений. При ограниченном количестве соединений укажите максимум количества запросов;
- балансировщиком и серверами — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.
-
Опционально: откройте вкладку Заголовки и отметьте заголовки HTTP-запросов, которые будут передаваться серверам.
-
Опционально: чтобы добавить дополнительное правило, нажмите Добавить правило. Количество правил не ограничено.
-
Нажмите Создать балансировщик нагрузки.
-
Установите компонент Octavia для работы с облачными балансировщиками нагрузки — для совместимости с версией релиза Yoga требуется версия 2.6.0:
pip3 install python-octaviaclient===2.6.0
-
Создайте балансировщик нагрузки:
openstack loadbalancer create \
--vip-subnet-id <subnet_uuid> \
--vip-address <loadbalancer_ip_address> \
--flavor <flavor_uuid> \
--name <loadbalancer_name>Укажите:
<subnet_uuid>
— ID приватной или публичной подсети, можно посмотреть с помощьюopenstack subnet list
<loadbalancer_ip_address>
— IP-адрес, который выделится для балансировщика нагрузки — один из свободных в подсети;<flavor_uuid>
— ID типа балансировщика нагрузки (флейвора). ID зависит от пула, в котором создается балансировщик. Cписок флейворов можно посмотреть с помощью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
-
Создайте правило, укажите в нем протокол и порт для балансировщика:
openstack loadbalancer listener create \
--name <listener_name> \
--protocol <protocol> \
--protocol-port <protocol_port> \
<loadbalancer>Укажите:
<listener_name>
— имя слушателя — отобразится в панели управления как имя правила;<protocol>
— название протокола;<protocol_port>
— номер порта.
-
Создайте в правиле протокол для сервера и укажите алгоритм:
openstack loadbalancer pool create \
--name <pool_name> \
--lb-algorithm <algorithm> \
--listener <listener_name> \
--protocol <protocol_name>Укажите:
<pool_name>
— имя пула, не будет отображаться в панели управления;<algorithm>
— название алгоритма:ROUND_ROBIN
илиLEAST_CONNECTIONS
<listener_name>
— имя слушателя;<protocol_name>
— название протокола.
-
Добавьте сервер в правило и укажите его IP-адрес:
openstack loadbalancer member create \
--subnet-id <subnet_uuid> \
--address <server_ip_address> \
--protocol-port <protocol_port> \
<pool_name>Укажите
<server_ip_address>
— IP-адрес сервера. -
Опционально: укажите параметры проверки доступности — они отразятся на странице балансировщика → вкладка Проверки:
openstack loadbalancer healthmonitor create \
--delay <delay> \
--max-retries <max_retries> \
--timeout <timeout> \
--type <protocol_name> \
<pool_name>Укажите:
<delay>
— интервал в се кундах;<max_retries>
— порог успеха;<timeout>
— таймаут соединения;<protocol_name>
— тип проверки — название протокола;<pool_name>
— имя pool.
-
Опционально: подключите публичный IP-адрес к балансировщику:
openstack floating ip set --port <loadbalancer_port_uuid> <floating_ip>
Укажите:
<loadbalancer_port_uuid>
— ID порта балансировщика — значениеvip_port_id
из вывода командыopenstack loadbalancer show <loadbalancer>
<floating_ip>
— публичный IP-адрес.
Используйте инструкции в документации Terraform: