Настройка балансировщика нагрузки HAProxy#
Для обеспечения отказоустойчивости и равномерного распределения трафика между компонентами Astra Automation можно использовать балансировщик нагрузки HAProxy. HAProxy работает на уровне TCP с использованием режима SSL passthrough – шифрованный HTTPS-трафик передается напрямую на целевые узлы без расшифровки на уровне балансировщика.
HAProxy анализирует значение поля SNI (Server Name Indication) в запросе TLS и направляет трафик в нужную группу серверов.
Такой подход сохраняет целостность TLS-сессии и позволяет использовать один IP-адрес и порт (443
) для всех компонентов платформы.
Предварительные требования#
Начальные условия:
у вас есть выделенный сервер или ВМ с установленной ОС, например, Astra Linux Special Edition, для установки HAProxy;
компоненты Astra Automation (Automation Controller, Automation Hub, контроллер Event-Driven Automation) развернуты и доступны по HTTPS;
у каждого компонента есть доменное имя, разрешаемое с сервера HAProxy, например,
controller.example.ru
,hub.example.ru
,eda.example.ru
;все целевые сервисы прослушивают порт
443
и имеют корректно установленные сертификаты TLS.
Пример конфигурации стенда#
В этом руководстве рассматривается настройка HAProxy для платформы, развернутой в следующей конфигурации.
Название узла |
IP-адрес |
Доменное имя |
Компонент |
---|---|---|---|
|
|
|
Automation Controller |
|
|
|
Automation Controller |
|
|
|
Private Automation Hub |
|
|
|
Private Automation Hub |
|
|
|
Контроллер Event-Driven Automation |
Установка HAProxy#
Для установки HAProxy выполните следующие действия на узле балансировщика:
Обновите список доступных пакетов:
sudo apt update
Установите пакет HAProxy:
sudo apt install haproxy --yes
Убедитесь, что служба запущена:
sudo systemctl status haproxy
В выводе ожидается наличие следующей строки:
Active: active (running) since Wed 2025-09-03 14:22:58 MSK; 1min 33s ago
Настройка HAProxy#
Файл конфигурации HAProxy по умолчанию находится в каталоге /etc/haproxy/
.
При настройке HAProxy обратите внимание на следующие особенности:
HAProxy должен работать в режиме TCP, то есть для всех frontend и backend компонентов необходимо указать
mode tcp
, чтобы обеспечить передачу зашифрованного трафика без его расшифровки.Для маршрутизации HTTPS-трафика по доменному имени сервера (SNI) настройте соответствующие правила, которые направляют соединения с конкретным именем (например,
controller.example.ru
,hub.example.ru
,eda.example.ru
) в соответствующие группы backend компонентов.Для всех backend компонентов используйте стратегию балансировки
balance source
, которая обеспечивает постоянное распределение трафика от одного клиента на один и тот же сервер, основываясь на IP-адресе клиента.Для каждого сервера в backend настройте проверку доступности с помощью опции
check
, чтобы HAProxy мог автоматически исключать недоступные серверы из списка рабочих узлов.Настройте административный интерфейс статистики HAProxy, доступный через порт
9000
по адресу/stats
, с включенной базовой аутентификацией для мониторинга состояния компонентов backend и их нагрузки. Интерфейс мониторинга в этом случае доступен по адресуhttp://<haproxy-ip>:9000/stats
. Вход осуществляется по имени пользователя и паролю, заданным в конфигурации, например,admin:password
.
Пример работы HAProxy показан на схеме:
Ниже приведен пример настройки HAProxy для маршрутизации HTTPS-трафика по SNI и балансировки нагрузки между несколькими backend компонентами.
Каждая секция файла настройки описана отдельно.
Полный файл настройки доступен по ссылке
.
Global#
В секции global
задаются глобальные параметры HAProxy.
Как правило, они задаются один раз и не требуют изменения после настройки.
Некоторые из них имеют эквиваленты в командной строке.
Полный список параметров доступен в документации HAProxy.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- log#
Сервер системного журнала для отправки записей HAProxy. При задании параметра можно указать уровень важности и категорию для классификации записей журнала. Он используется для настройки централизованного сбора событий и информации о работе HAProxy.
Примеры настройки:
log /dev/log local0 log /dev/log local1 notice
Первая строка задает отправку записей журнала в системный сокет
/dev/log
с категориейlocal0
без ограничения по уровню важности.Вторая строка также задает отправку через сокет
/dev/log
, но с категориейlocal1
и ограничением на уровень важности сообщений – будет фиксироваться только уровень важностиnotice
и выше.
- chroot#
Каталог, который задается как новый корневой каталог файловой системы для процессов HAProxy. Это повышает безопасность, ограничивая доступ HAProxy в файловой системе заданным каталогом.
- user#
Пользователь, от имени которого будет работать HAProxy.
- group#
Группа, которой будут принадлежать процессы HAProxy, работающие от указанного пользователя.
- daemon#
Запуск HAProxy в фоновом режиме.
- stats socket#
Unix-сокет для доступа к статистике HAProxy.
- tune.ssl.default-dh-param#
Размер параметра Диффи-Хеллмана для соединений SSL.
- maxconn#
Максимальное количество одновременных соединений, которые HAProxy может обслуживать.
Пример заполнения секции:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats level admin
tune.ssl.default-dh-param 2048
maxconn 4096
Defaults#
Секция defaults
определяет параметры, которые будут наследоваться всеми другими секциями, если они не переопределены.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- log#
Сервер системного журнала для отправки записей HAProxy. Можно указать
log global
для использования параметров из секцииglobal
.
- mode#
Режим работы.
- option tcplog#
Включение расширенного ведения журнала соединений TCP.
- timeout connect#
Максимальное время ожидания успешной попытки подключения к серверу.
- timeout client#
Максимальное время ожидания активности от клиента.
- timeout server#
Максимальное время ожидания активности от сервера.
- retries#
Количество попыток переподключения к серверу при сбоях.
Пример заполнения секции:
defaults
log global
mode tcp
option tcplog
timeout connect 5s
timeout client 50s
timeout server 50s
retries 3
Frontend https-in#
Frontend https-in
принимает трафик на порту 443
и маршрутизирует его по SNI.
Для разных доменных имен создаются правила, которые перенаправляют запросы соответствующим backend компонентам.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- bind#
IP-адрес и порт для входящих соединений.
- mode#
Режим работы frontend.
- tcp-request#
Опции обработки запросов на уровне TCP.
Пример настройки:
tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 }
Здесь:
inspect-delay
– время ожидания анализа первых пакетов;content accept if { req_ssl_hello_type 1 }
– условие, при котором соединение принимается, например, при обнаружении TLS ClientHello.
- acl#
Правила фильтрации трафика, например, по SNI.
- use_backend#
Backend компонент в который необходимо перенаправить трафик при выполнении условия.
Пример заполнения секции:
# --- HTTPS passthrough frontend ---
frontend https-in
bind *:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
acl is_controller req.ssl_sni -i controller.example.ru
acl is_hub req.ssl_sni -i hub.example.ru
acl is_eda req.ssl_sni -i eda.example.ru
use_backend controller_backend if is_controller
use_backend hub_backend if is_hub
use_backend eda_backend if is_eda
Backend controller_backend#
В секции backend controller_backend
задаются настройки серверов Automation Controller к которым будет направляться трафик, если клиент обратился к домену controller.example.ru
.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- mode#
Режим работы серверов Automation Controller.
- balance#
Алгоритм балансировки нагрузки.
- server#
Сервер Automation Controller с IP-адресом, портом и проверкой доступности.
Пример заполнения секции:
# --- Controller backend ---
backend controller_backend
mode tcp
balance source
server ctrl1 192.168.56.11:443 check
server ctrl2 192.168.56.12:443 check
Backend hub_backend#
В секции backend hub_backend
задаются настройки серверов Private Automation Hub к которым будет направляться трафик, если клиент обратился к домену hub.example.ru
.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- mode#
Режим работы серверов Private Automation Hub.
- balance#
Алгоритм балансировки нагрузки.
- server#
Сервер Private Automation Hub с IP-адресом, портом и проверкой доступности.
Пример заполнения секции:
# --- PAH backend ---
backend hub_backend
mode tcp
balance source
server hub1 192.168.56.13:443 check
server hub2 192.168.56.14:443 check
Backend eda_backend#
В секции backend eda_backend
задаются настройки сервера контроллера Event-Driven Automation к которому будет направляться трафик, если клиент обратился к домену eda.example.ru
.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- mode#
Режим работы сервера контроллера Event-Driven Automation.
- server#
Сервера контроллера Event-Driven Automation с IP-адресом, портом и проверкой доступности.
Пример заполнения секции:
# --- EDA backend ---
backend eda_backend
mode tcp
balance source
server edac 192.168.56.15:443 check
Listen stats#
Секция listen stats
включает встроенный веб-интерфейс статистики HAProxy, например, доступный по адресу http://<ip>:9000/stats
.
Для настройки HAProxy в Astra Automation используйте следующие параметры:
- bind#
IP-адрес и порт веб-интерфейса статистики.
- mode#
Режим работы веб-интерфейса.
- stats#
Настройки веб-интерфейса статистики.
Пример настройки:
stats enable stats uri /stats stats refresh 10s stats auth admin:password stats realm Haproxy\ Statistics
Здесь:
enable
– включение отображения статистики;uri
– URI страницы статистики;refresh
– интервал обновления данных;auth
– логин и пароль для аутентификации;realm
– текстовое сообщение в диалоге аутентификации.
Пример заполнения секции:
listen stats
bind *:9000
mode http
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:password
stats realm Haproxy\ Statistics
Добавление технического заголовка для идентификации узла#
Для упрощения диагностики балансировки через HAProxy можно добавить дополнительный HTTP-заголовок X-Served-By
.
Для этого выполните следующие действия:
На всех узлах платформы настройте NGINX:
В каталоге
/etc/nginx/conf.d/
создайте конфигурационный файл NGINX со следующим содержимым:server { listen 443 ssl; server_name <hostname>; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.key; location / { add_header X-Served-By "<host>"; } }
Здесь:
<hostname> – доменное имя сервера (SNI), например,
controller.example.ru
;<host> – название узла, например,
ctrl1
.
Перезапустите сервис
nginx
:sudo systemctl reload nginx
Проверьте заголовок ответа:
curl -I https://controller.example.ru
Ожидаемый результат выполнения команды:
Обеспечение отказоустойчивости балансировщика#
Отказоустойчивую архитектуру балансировщика нагрузки можно обеспечить следующими способами:
Использование VRRP и keepalived.
На физических серверах (BareMetal) доступен уровень L2 сети, что позволяет использовать классический механизм VRRP для организации виртуального IP-адреса. В этом случае несколько узлов с установленным HAProxy объединяются в кластер, где один из узлов активен, а остальные работают в режиме ожидания. При отказе активного узла виртуальный IP-адрес автоматически переносится на резервный узел. Пример настройки VRRP с использованием Keepalived для BareMetal серверов приведен в документации Yandex Cloud.
Использование внешнего балансировщика уровня TCP.
В инфраструктуре, где нет поддержки VRRP (например, в облачных средах без доступа к протоколам L2), рекомендуется использовать внешний сетевой балансировщик, который обеспечивает распределение соединений TCP между несколькими узлами с HAProxy и поддерживает проверку их доступности. В качестве примера можно использовать Yandex Network Load Balancer, который работает на уровне TCP и автоматически исключает недоступные узлы из схемы балансировки.
В результате отказ одного из узлов балансировщика не приведет к недоступности сервисов Astra Automation, трафик будет автоматически перенаправляться на резервные узлы или через внешний балансировщик.