Управление балансировщиком нагрузки

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

Статус Комментарий
ONLINE Сервис работает. Проверки доступности сервиса проходят успешно
CREATING Сервер добавляется в правило
UPDATING Настройки сервера обновляются
OFFLINE Сервер не принимает запросы, при этом сам сервер может быть в активном состоянии
BACKUP Сервер переведен в статус резервного и будет включен в работу, если будут неработоспособными остальные серверы правила.
Чтобы перевести сервер в обычный режим работы, выберите пункт меню сервера Вернуть в работу
NO_MONITOR Работоспособность сервиса не проверяется проверками доступности. Если все сервисы балансировщика в этом статусе, то статус балансировщика будет ONLINE
DRAINING Сервер не принимает новые подключения, но продолжает обрабатывать текущие
ERROR Сервис на указанном порту не отвечает либо не проходит проверку по типу ответа
DELETING Сервер удаляется из балансировщика, при этом работоспособность сервера не затрагивается

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

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

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

Статистика

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

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

Перенаправление запроса HTTP на HTTPS

Чтобы любые регулярные HTTP-запросы (порт 80) перенаправлять на HTTPS (порт 443):

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

  2. Создайте listener на порту 80:

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

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

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

TCP → PROXY

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

В случае балансировки и терминации HTTP(S)-трафика данная задача решается добавлением заголовка X-Forwarded-For и его обработкой, например, на nginx-серверах за балансировщиком при помощи модуля ngx_http_realip_module.

При балансировке TCP-трафика от HTTPS-клиентов и передаче его на веб-серверы напрямую без модификации или терминации добавить данный заголовок невозможно. Поэтому для передачи заголовка используются возможности, предоставляемые Proxy Protocol.

Поскольку балансировщик Облачной платформы базируется на HAproxy, предлагаемые ниже решения актуальны в том числе для решений на базе связки HAProxy – nginx.

Для настройки всех необходимых правил на балансировщике:

  1. Создайте правило для балансировки TCP-трафика на 80 порту (HTTP). Укажите TCP в качестве протокола балансировщика и PROXY — в качестве протокола серверов.
  2. Создайте правило для балансировки TCP-трафика на 443 порту (HTTPS). Укажите TCP в качестве протокола балансировщика и PROXY — в качестве протокола серверов.
  3. Настройте серверы, на которые будет распределяться трафик. Укажите алгоритм балансировки и необходимые настройки проверок доступности и таймауты соединений по инструкции Основные настройки правила .

Если вам не требуется балансировка HTTP или HTTPS — можно не настраивать какое-либо из этих правил в зависимости от решаемых задач.

Для настройки nginx на самих серверах (для работы с PROXY-протоколом) включите поддержку директивы nginx proxy_protocol, подробнее об этом в официальной документации nginx.

Пример nginx.conf, настроенного для приема реальных IP-адресов от балансировщика Облачной платформы:

server {
    server_name localhost;

    # ВНИМАНИЕ! Работа с директивой proxy_protocol возможна только в связке с haproxy
    # Для прямого доступа данную директиву необходимо отключить.
    listen 443 ssl default_server proxy_protocol;

    ssl_certificate      /etc/nginx/ssl/public.example.com.pem;
    ssl_certificate_key  /etc/nginx/ssl/public.example.com.key;

    # Адрес HAProxy
    set_real_ip_from 192.168.1.0/24;
    # Рекомендуется указывать CIDR, так как IP балансировщика 
    # может изменяться в некоторых случаях
    real_ip_header proxy_protocol;

    root /usr/share/nginx/html;
    index index.html index.htm;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ /\.ht {
        deny all;
    }
}

Примечание: использование LVS и метода Direct Server Return не поддерживается согласно политике безопасности Облачной платформы.

При подготовке решения для передачи IP-адресов клиентов с помощью балансировщика Облачной платформы использовалась статья Получаем IP-адреса HTTPS-клиентов с HAProxy (frontend) на Nginx (backend) в режимах HTTP и TCP-балансировки.