HAProxy :防止粘附到备份服务器
HAProxy : Prevent stickiness to a backup server
我遇到了 HAProxy (1.8) 的配置问题。
上下文:
- 在 HAProxy 配置中,我在后端有几个服务器,还有一个额外的备份服务器,以防其他服务器出现故障。
- 一旦客户端从服务器获得答案,它必须坚持使用该服务器进行下一次查询。
- 出于某些充分的原因,我不能使用 cookie 来解决这个问题,我不得不使用 stick-table 代替。
问题:
- 当每个 "normal" 服务器都关闭时,客户端会按预期重定向到备份服务器。
- 但是 stick-table 然后填充了客户端和备份服务器 ID 之间的关联。
- 并且当每个 "normal" 服务器都恢复时,stick table 中存在并与备份服务器 ID 相关联的客户端将继续被重定向到备份服务器,而不是正常的!
这真让我心烦意乱...
所以我的问题是:如何防止 HAProxy 将客户端粘在后端的备份服务器上?
请在下面找到配置示例:
defaults
option redispatch
frontend fe_test
bind 127.0.0.1:8081
stick-table type ip size 1m expire 1h
acl acl_test hdr(host) -i whatever.domain.com
...
use_backend be_test if acl_test
...
backend be_test
mode http
balance roundrobin
stick on hdr(X-Real-IP) table fe_test
option httpchk GET /check
server test-01 server-01.lan:8080 check
server test-02 server-02.lan:8080 check
server maintenance 127.0.0.1:8085 backup
(我已经尝试过给备份服务器增加较低的权重,但并没有解决这个问题。)
我在文档中读到 "stick-on" 关键字有一些 "if/unless" 选项,也许我可以用它来写一个基于后端服务器名称的条件,但我不知道要使用的语法,或者即使它是可能的。
欢迎任何想法!
我真傻!我对 stick table 配置如此着迷,以至于我没想到要查看服务器选项...
有一个简单的关键字完美解决了我的问题:不粘
Never add connections allocated to this sever to a stick-table. This
may be used in conjunction with backup to ensure that stick-table
persistence is disabled for backup servers.
所以我的配置示例的最后一行简单地变成了:
server maintenance 127.0.0.1:8085 backup non-stick
...现在一切如我所愿。
我遇到了 HAProxy (1.8) 的配置问题。
上下文:
- 在 HAProxy 配置中,我在后端有几个服务器,还有一个额外的备份服务器,以防其他服务器出现故障。
- 一旦客户端从服务器获得答案,它必须坚持使用该服务器进行下一次查询。
- 出于某些充分的原因,我不能使用 cookie 来解决这个问题,我不得不使用 stick-table 代替。
问题:
- 当每个 "normal" 服务器都关闭时,客户端会按预期重定向到备份服务器。
- 但是 stick-table 然后填充了客户端和备份服务器 ID 之间的关联。
- 并且当每个 "normal" 服务器都恢复时,stick table 中存在并与备份服务器 ID 相关联的客户端将继续被重定向到备份服务器,而不是正常的!
这真让我心烦意乱...
所以我的问题是:如何防止 HAProxy 将客户端粘在后端的备份服务器上?
请在下面找到配置示例:
defaults
option redispatch
frontend fe_test
bind 127.0.0.1:8081
stick-table type ip size 1m expire 1h
acl acl_test hdr(host) -i whatever.domain.com
...
use_backend be_test if acl_test
...
backend be_test
mode http
balance roundrobin
stick on hdr(X-Real-IP) table fe_test
option httpchk GET /check
server test-01 server-01.lan:8080 check
server test-02 server-02.lan:8080 check
server maintenance 127.0.0.1:8085 backup
(我已经尝试过给备份服务器增加较低的权重,但并没有解决这个问题。)
我在文档中读到 "stick-on" 关键字有一些 "if/unless" 选项,也许我可以用它来写一个基于后端服务器名称的条件,但我不知道要使用的语法,或者即使它是可能的。
欢迎任何想法!
我真傻!我对 stick table 配置如此着迷,以至于我没想到要查看服务器选项...
有一个简单的关键字完美解决了我的问题:不粘
Never add connections allocated to this sever to a stick-table. This may be used in conjunction with backup to ensure that stick-table persistence is disabled for backup servers.
所以我的配置示例的最后一行简单地变成了:
server maintenance 127.0.0.1:8085 backup non-stick
...现在一切如我所愿。