Можно ли в HAProxy остановить маршрутизацию трафика на конкретный сервер с активными сеансами, отключив сервер?
Я пытаюсь реализовать следующую настройку
HA -|
|- Redis1
|- Redis2
В любое время только один из экземпляров redis должен обслуживать входящие запросы.
Судя по документации, кажется, что вы можете отключить сервер динамически и HA прекратит направление трафика на отключенный сервер. Хотя это работало для новых клиентских подключений, существующие клиентские подключения по-прежнему обслуживаются контентом с отключенного сервера. Но если я уничтожу экземпляр redis, даже существующие клиентские подключения будут перенаправлены на другой экземпляр.
Можно ли добиться такого поведения, не убивая экземпляр?
Вот мой конфиг HA:
global
stats socket /opt/haproxy/admin.sock mode 660 level admin
stats socket ipv4@*:19999 level admin
defaults
log global
mode tcp
listen myproxy
mode tcp
bind *:4444
balance roundrobin
server redis1 127.0.0.1:6379 check
server redis2 127.0.0.1:7379 check
1 ответ
Решение
Нашел ответ. Нужно добавить следующие директивы:
on-marked-down shutdown-sessions
Это закрывает все существующие сессии. Например:
server redis1 127.0.0.1:6379 check on-marked-down shutdown-sessions
server redis2 127.0.0.1:7379 check on-marked-down shutdown-sessions