База знаний

Список статей
Наверх

Балансировщик нагрузки Облачной платформы Selectel

Балансировщик нагрузки в сервисе Виртуальное приватное облако используется для распределения входящего трафика между уже существующими виртуальными машинами в пределах одного региона.

Глоссарий

Термин

Определение

Балансировщик нагрузки

Балансировщик нагрузки распределяет входящие потоки между серверами в соответствии с заданными параметрами, настраиваемыми в правиле

Сервер

Виртуальные машины, существующие в проекте, которые добавляются для обработки потока трафика

Правило

Настройки переадресации трафика с балансировщика на группу серверов. В интерфейсе панели управления в правило объединены настройки переадресации, а также проверки доступности, настройки алгоритма, соединений и другие, которые относятся к этому потоку трафика

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

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

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

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

Настройки соединений

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

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

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

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

  1. Перейдите в карточке проекта на вкладку Балансировщики нагрузки.

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

  3. Введите имя балансировщика. Можно оставить имя, сгенерированное автоматически.

  4. Выберите необходимый регион.

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

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

  7. В блоке Конфигурация правила на вкладке Серверы выберите необходимые серверы, на которые будет отправляться трафик этого правила.

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

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

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

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

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

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

  • протоколы HTTP, HTTPS, UDP, TCP, PROXY для серверов.

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

Для выбранного протокола автоматически проставляются стандартные порты.

Примечание: можно выбрать другой порт в строке с сервером при его настройке.

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

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

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

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

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

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

В случае удаления балансировщика, SSL-сертификат будет удален вместе с ним.

Серверы

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

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

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

  • Приостановить — сервер не будет получать подключения, пока не будет вручную возвращен в работу;

  • Убрать из правила — сервер перестанет участвовать в балансировании, но при этом продолжит работать.  

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

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

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

  • Round Robin - алгоритм кругового обслуживания, который представляет собой перебор по круговому циклу: первый запрос передается одному серверу, затем следующий запрос передается другому и так до достижения последнего сервера, а затем цикл начинается сначала;

  • Least connections - алгоритм учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Каждый следующий вопрос передается серверу с наименьшим количеством активных подключений.

Sticky Sessions — алгоритм распределения входящих запросов, при котором соединения передаются на один и тот же сервер группы. Благодаря использованию этого метода запросы распределяются по серверам с использованием:

  • APP-cookie — уже существующая cookie, которая задана в самом коде приложения;

  • HTTP-cookie — cookie, которую создает и прикрепляет к сессии балансировщик;

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

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

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

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

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

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

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

  • тип проверки: HTTP, PING, TCP;

  • интервал, с которым балансировщик отправляет проверяющие запросы серверам;

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

  • для протоколов HTTP и  HTTPS можно настроить URL и ожидаемые коды ответа;

  • порог успеха - количество успешных обращений подряд, после которых сервер переводится в рабочее состояние;

  • порог неуспеха - количество неуспешных обращений подряд, после которых работа сервера приостанавливается.

Настройки соединений

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

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

  • балансировщиком и серверами, указав таймаут соединения, таймаут неактивности и таймаут ожидания TCP-пакетов.

HTTP-заголовки

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

  • X-Forwarded-For

  • X-Forwarded-Port

  • X-Forwarded-Proto

Статусы серверов

СтатусКомментарий
ONLINEСервис работает. Проверки доступности сервиса проходят успешно
CREATINGСервер добавляется в правило
UPDATINGНастройки сервера обновляются
OFFLINEСервер не принимает запросы, при этом сам сервер может быть в активном состоянии
BACKUP

Сервер переведен в статус резервного и будет включен в работу, если будут неработоспособными остальные серверы правила. 
Чтобы перевести сервер в обычный режим работы, выберите пункт меню сервера Вернуть в работу

NO_MONITORРаботоспособность сервиса не проверяется проверками доступности. 
Если все сервисы балансировщика в этом статусе, то статус балансировщика будет ONLINE
DRAININGСервер не принимает новые подключения, но продолжает обрабатывать текущие
ERRORСервис на указанном порту не отвечает либо не проходит проверку по типу ответа
DELETINGСервер удаляется из балансировщика, при этом работоспособность сервера не затрагивается

Статусы балансировщика

Статусы балансировщика зависят от статусов серверов, на которые он распределяет запросы, и от его собственного состояния.

СтатусКомментарий
ONLINEВсе проверки доступности проходят успешно
CREATINGБалансировщик нагрузки создается
UPDATINGОбновление конфигурации балансировщика
OFFLINEБалансировщик не обрабатывает запросы и выключен
DEGRADEDОдна из составляющих балансировщика находится в статусе ERROR
ERRORПричинами такого статуса могут быть: все серверы находятся в статусе ERROR или произошла ошибка в работе самого балансировщика. 
Если вы видите, что даже при таком статусе балансировщика все серверы работают корректно и находятся в статусе ONLINE, пожалуйста, обратитесь в техническую поддержку
DELETINGБалансировщик находится в процессе удаления

Статистика

В карточке балансировщика можно просмотреть статистику и узнать:

  • сколько активных соединений в текущий момент;

  • сколько соединений всего;

  • сколько соединений было не обработано;

  • сколько байт было получено, сколько отправлено.

Перенаправление запроса http на https

Балансировщик можно создать через панель управления my.selectel.ru или с помощью API Openstack Octavia.

image

Правило состоит из:

  • Listener - обработчик, который прослушивает поступающий на балансировщик поток трафика и срабатывает на настроенные порт и протокол. Перенаправляет трафик к необходимой группе серверов;

  • Pool - группа серверов одного Listener. Привязывается к Listener;

  • Сервер (Members) - конкретные серверы внутри одного Pool.

Наше правило - это упрощенная модель терминологии, принятой в Openstack Octavia. Для решения более сложных задач можно воспользоваться API.

Одной из таких задач является необходимость любые регулярные HTTP-запросы (порт 80) перенаправлять на HTTPS (порт 443). Для этого выполните:

  1. Создайте http_listener на порту 80: 

    openstack loadbalancer listener create --name http_listener --protocol HTTP --protocol-port 80 lb1
  2. Настройте политику L7 Policy1 на http_listener с действием REDIRECT_TO_URL, указывающим на URL: 

    openstack loadbalancer l7policy create --action REDIRECT_TO_URL --redirect-url https://example.com/ --name policy1 http_listener
  3. Добавьте L7-правило в policy1, которое соответствует всем запросам:

    openstack loadbalancer l7rule create --compare-type STARTS_WITH --type PATH --value / policy1