Можно ли в 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
Другие вопросы по тегам