在 HAProxy 中,是否可以通过禁用服务器来停止将流量路由到具有活动会话的特定服务器?

In HAProxy, is it possible to stop routing traffic to a specific server with active sessions by disabling the server?

我正在尝试实施以下设置

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

找到答案了。需要添加以下指令:

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