Как работает HAProxy в кластере Принтум
Как работает HAProxy в кластере Принтум
Назначение
HAProxy (Отказоустойчивая конфигурация Proxy) — программный балансировщик нагрузки и прокси уровней L4/L7. В кластере Принтум используется для распределения запросов между узлами ПринтМенеджера.
Алгоритмы балансировки
| Алгоритм | Описание | Когда применять |
|---|---|---|
roundrobin |
Запросы распределяются поочерёдно | Однородная нагрузка, равноценные узлы |
leastconn |
Запрос идёт к узлу с наименьшим числом соединений | Долгоживущие соединения |
source |
Хэш по IP клиента, клиент всегда попадает на один узел | Sticky sessions без cookies |
uri |
Хэш по URI | Кэшируемые сервисы |
random |
Случайный выбор из N лучших | Упрощённое распределение |
first |
Первый доступный узел в порядке списка | Active-passive |
Health Check
HAProxy периодически проверяет доступность backend-узлов.
| Тип | Описание |
|---|---|
| TCP check | Проверяет только открытие TCP-соединения |
| HTTP check | Отправляет HTTP-запрос, проверяет статус ответа |
| Agent check | Опрашивает внешний агент на узле для получения веса |
Параметры проверки:
inter— интервал между проверками (например, 2s);rise— количество успешных проверок для возврата в пул;fall— количество неудачных проверок для исключения из пула.
Failover
Штатная работа:
Клиент → HAProxy → [PM1] [PM2]
Отказ PM1:
HAProxy детектирует неудачу health check (после N попыток)
PM1 помечается DOWN
Все новые запросы → PM2
Восстановление PM1:
HAProxy детектирует успех health check (после M попыток)
PM1 возвращается в пул
Запросы снова распределяются между PM1 и PM2
Во время failover активные соединения к PM1 прерываются — клиент получает ошибку или retry.
Sticky Sessions
Если ПринтМенеджер хранит сессионное состояние локально, необходима привязка клиента к узлу:
В Active-Active кластере Принтум сессионное состояние хранится в Redis — sticky sessions не требуются.
Роль HAProxy в Active-Active конфигурации Принтум
┌─────────┐
Клиент ПМ ──→ │ HAProxy │
└────┬────┘
┌─────────┴─────────┐
▼ ▼
ПринтМенеджер 1 ПринтМенеджер 2
│ │
└────────┬──────────┘
▼
Shared Redis
Shared NFS
- Оба узла активны, обрабатывают запросы одновременно.
- HAProxy распределяет входящие HTTP-запросы (Клиент ПМ, API, Встроенное приложение).
- При отказе одного узла HAProxy автоматически направляет весь трафик на второй.
В стандартной конфигурации используется алгоритм Round Robin с включением Sticky Session. Параметры таймаутов: сервера — 30 сек, клиента — 30 сек, соединения — 5 сек. Повторы (retries) не требуются. Принтум.