Создание балансировщика нагрузки

Обратите внимание! При создании балансировщиков любых типов расходуется общая квота проекта на балансировщики.

Создание балансировщика в панели управления

Для создания балансировщика нагрузки в панели управления:

  1. Перейдите в раздел Балансировщики в проекте.
  2. Нажмите кнопку Создать балансировщик.
  3. Введите имя балансировщика или оставьте автоматически сгенерированное имя.
  4. Выберите необходимый регион.
  5. Выберите тип балансировщика в зависимости от нагрузки на проект – по умолчанию будет выбран тип Базовый с резервированием.
  6. Укажите адрес балансировщика, выбрав подсеть. Поле IP-балансировщика по умолчанию будет заполнено одним из свободных адресов подсети. Подключите плавающий IP.
  7. Добавьте настройки правила для балансировщика. Подробнее об основных настройках правила.

    Примечание: для создания балансировщика достаточно выбрать в правиле протокол и порт балансировщика и серверов. Все остальные настройки правил будут заполнены по умолчанию – их можно изменить после создания балансировщика.

  8. В блоке с правилом на вкладке Серверы выберите те серверы, на которые будет отправляться трафик правила.

  9. При необходимости добавьте другие правила для балансировщика, нажав Добавить правило.

  10. Проверьте стоимость и нажмите кнопку Создать балансировщик нагрузки.

Основные настройки правила

Ниже описаны основные настройки правила, которые можно добавить в панели управления.

Протокол и порт

В каждом правиле можно выбрать протокол и порт для балансировщика и для серверов. Доступны:

  • протоколы HTTP, HTTPS, UDP, TCP для балансировщика;
  • протоколы HTTP, HTTPS, UDP, TCP, PROXY для серверов.

Не все протоколы стыкуются друг с другом, это учтено в интерфейсе — невозможно указать неподходящие протоколы.

Для выбранного протокола автоматически проставляется стандартный порт. Установленное значение порта является общим для всех серверов.

Примечание: в работающем балансировщике нельзя поменять протоколы и порты правила, можно только пересоздать правило с нужными настройками.

SSL-сертификат

Для балансировки HTTPS-трафика рекомендуется добавить в правило SSL-сертификат, чтобы трафик корректно распознавался и распределялся на серверы.

Для настройки потока HTTPS → HTTP добавление SSL-сертификата обязательно.

Если выбран поток HTTPS → HTTPS и не загружен SSL-сертификат, то передача данных будет осуществляться по протоколу PROXY, без расшифровки.

Примечание: SSL-сертификат можно добавить только при создании правила. В случае удаления балансировщика SSL-сертификат будет удален вместе с ним.

Серверы

При создании балансировщика выберите серверы, которые нужно добавить в правило. Укажите нужный IP, если у сервера несколько портов, и установите вес сервера.

После создания балансировщика будет возможно:

  • назначить серверу роль резервного — сервер не будет получать подключения, пока не выйдут из строя все остальные серверы правила;
  • приостановить — сервер не будет получать подключения, пока не будет вручную возвращен в работу;
  • убрать из правила — сервер перестанет участвовать в балансировании, но при этом продолжит работать.

Можно добавлять новые серверы в правило уже работающего балансировщика, нажав на кнопку Добавить сервер.

Алгоритм балансировки

Можно выбрать один из двух алгоритмов распределения запросов:

  • Round Robin — алгоритм кругового обслуживания, который представляет собой перебор по круговому циклу: первый запрос передается одному серверу, затем следующий запрос передается другому и так до достижения последнего сервера, а затем цикл начинается сначала. Запросы распределяются на серверы по очереди в соответствии с заданным весом;
  • Least connections — алгоритм учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Каждый следующий запрос передается серверу с наименьшим количеством активных подключений, вес сервера не учитывается.

Можно включить опцию Sticky Sessions — метод распределения входящих запросов, при котором соединения передаются на один и тот же сервер. Идентифицировать сессию можно по:

  • APP-cookie — уже существующая cookie, которая задана в самом коде приложения;
  • HTTP-cookie — cookie, которую создает и прикрепляет к сессии балансировщик;
  • Source IP — IP-адрес клиента хешируется и делится на вес каждого сервера в правиле, чтобы определить сервер, который будет обрабатывать запросы.

    Запросы одного и того же клиента будут передаваться на один и тот же сервер. Если закрепленный за конкретным адресом сервер недоступен, запрос будет перенаправлен на другой сервер.

Проверки доступности

Можно задать настройки для проверки соединения с балансируемыми серверами.

Проверки доступности используются балансировщиком для того чтобы понять, что какой-то из серверов вышел из строя и его нельзя использовать. В случае недоступности одного сервера соединения будут перенаправлены на работающий сервер.

По умолчанию проверки доступности включены, но их можно отключить на вкладке Проверки. Примечание: если проверки отключены, серверы будут в статусе NO MONITOR.

Настроить можно следующие параметры проверки:

  • тип проверки: HTTP, HTTPS, PING, TCP, TLS-HELLO, UDP-CONNECT;
  • интервал в секундах, с которым балансировщик отправляет проверяющие запросы серверам;
  • таймаут соединения — время в секундах, при котором ожидается ответ от адресата. Если не было ответа, соединение прерывается, как только это время истекло;
  • для протоколов проверки HTTP и HTTPS можно настроить URL и ожидаемые коды ответа;
  • порог успеха — количество успешных обращений подряд, после которых сервер переводится в рабочее состояние;
  • порог неуспеха — количество неуспешных обращений подряд, после которых работа сервера приостанавливается.

Соединения

Можно задавать настройки времени соединения между:

  • входящими запросами и балансировщиком – укажите таймаут соединения, а также ограничено или нет количество соединений. При ограниченном количестве соединений необходимо указать максимум количества запросов.
  • балансировщиком и серверами — укажите таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.

Заголовки HTTP-запросов

В обычном режиме работы балансировщик передает серверу только исходное тело HTTP-запроса, заменяя IP-адрес клиента на свой. Включите необходимые типы дополнительных заголовков в запрос, чтобы серверы получали эту информацию для корректной работы или анализа:

  • X-Forwarded-For;
  • X-Forwarded-Port;
  • X-Forwarded-Proto.

Создание балансировщика с помощью CLI

Подробно о начале работы с OpenStack CLI.

Для работы с балансировщиками нагрузки в OpenStack необходимо установить Octavia-клиент:

pip install python-octaviaclient

Базовый HTTP-балансировщик нагрузки с плавающим IP-адресом необходимо создавать в приватной подсети.

Если подсеть не создана, создайте приватную сеть и подсеть в ней:

openstack network create <network name>

openstack subnet create \
 --network <network name> \
 --subnet-range <CIDR subnet range> \
 <subnet name>

Получите ID нужной подсети с помощью команды:

openstack subnet list

Создайте балансировщик в приватной подсети:

openstack loadbalancer create --name <loadbalancer name> --vip-subnet-id <subnet id>

Перед выполнением следующих команд проверьте, что балансировщик находится в статусах ONLINE и ACTIVE:

openstack loadbalancer show <loadbalancer name>

Пример вывода:

+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| admin_state_up      | True                                 |
| availability_zone   |                                      |
| created_at          | 2021-03-19T10:08:53                  |
| description         |                                      |
| flavor_id           | None                                 |
| id                  | a100ac36-d049-44ef-1321-1ae83c8961b1 |
| listeners           |                                      |
| name                | loadbalancer                         |
| operating_status    | ONLINE                               |
| pools               |                                      |
| project_id          | 4ba4503045104d11aa9341a723bb01dd     |
| provider            | amphora                              |
| provisioning_status | ACTIVE                               |
| updated_at          | 2021-03-19T10:15:16                  |
| vip_address         | 192.168.0.67                         |
| vip_network_id      | 300d229a-4ce2-1d7a-bb9e-ae535f7dc2da |
| vip_port_id         | d0252a73-5961-4a4f-9338-3da74af34a32 |
| vip_qos_policy_id   | None                                 |
| vip_subnet_id       | 39322111-5a16-4e1b-92f2-a0077c1bebfc |
| tags                |                                      |
+---------------------+--------------------------------------+

Подробнее о компонентах балансировщика.

Создайте http_listener:

openstack loadbalancer listener create --name <listener name> --protocol HTTP --protocol-port 80 <loadbalancer name>

Создайте pool:

openstack loadbalancer pool create --name <pool name> --lb-algorithm ROUND_ROBIN --listener <listener name> --protocol HTTP

Создайте HTTP health monitor:

openstack loadbalancer healthmonitor create --delay 5 --max-retries 4 --timeout 10 --type HTTP --url-path /healthcheck <pool name>

Добавьте IP-адреса из приватной подсети в pool (например, 192.168.0.3 и 192.168.0.4):

openstack loadbalancer member create --subnet-id <subnet id> --address 192.168.0.3 --protocol-port 80 <pool name>
openstack loadbalancer member create --subnet-id <subnet id> --address 192.168.0.4 --protocol-port 80 <pool name>

Просмотрите значение vip_port_id балансировщика с помощью команды:

openstack loadbalancer show <loadbalancer name>

Создайте плавающий адрес, если он не создан:

openstack floating ip create external-network

Просмотрите значение floating_ip_id нужного плавающего IP:

openstack floating ip list

Назначьте плавающий адрес floating_ip_id порту балансировщика vip_port_id:

openstack floating ip set --port <loadbalancer vip port id> <floating ip id>

Создание балансировщика через Terraform

Балансировщики нагрузки можно создавать через Terraform.

Для создания проекта с несколькими облачными серверами и балансировщиком нагрузки используйте пример на GitHub.