Skip to main content

Как работает HAProxy в кластере Принтум

Как работает HAProxy в кластере Принтум

Назначение

HAProxy (High Availability 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 автоматически направляет весь трафик на второй.

TODO: уточнить — какой алгоритм балансировки используется в стандартной конфигурации Принтум.