在 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
我正在尝试实施以下设置
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