假设我有 2 台服务器 - SA 和 SB。是否可以将 HAProxy 配置为如下方式工作:
所有连接都转到 SA -> SA 关闭 -> HAProxy 将所有连接切换到 SB -> 直到 SB 恢复正常 - 没有连接转到 SA,即使它再次启动 -> SB 关闭 -> HAProxy 切换到 SA...
简而言之,我希望 HAProxy 仅在当前服务器出现故障时切换。也许我应该使用 HAProxy 以外的其他东西?
答案1
检查一下这个配置:
listen my-server 0.0.0.0:80
balance roundrobin
server web01 10.10.10.1:80 check inter 10s fall 3 rise 99999999
server web02 10.10.10.2:80 check backup
默认情况下,所有请求都会到达 web01。web02 将不会被使用。如果 web01 停止响应,则 30 秒后(每隔 10 秒检查 3 次)服务器将下线。web02 将上线,所有请求都将到达它。
如果 web01 恢复,则只有在每隔 10 秒进行 9999999 次检查后才会重新上线 - 这实际上是永远不会发生的。
答案2
如果您只有两台,且恰好有两台服务器,那么对通过 pacemaker/corosync 管理的服务使用 VIP 以使其具有高可用性可能更有意义。
通过将 SB 标记为备份服务器,haproxy 也可以实现这一点。这样,它仅在 SA 不可用时使用:
backend mybackend
mode http
balance roundrobin
option httpchk /test.html
server server1.example.com server1.example.com:80 weight 1 check port 80 inter 5s rise 3 fall 2
server server2.example.com server2.example.com:80 backup weight 1 check port 80 inter 5s rise 3 fall 2
但是,这并不能实现您想要的第二部分:一旦恢复,它就会再次开始使用 A SA。我不确定是否有选项可以让 haproxy 按照您想要的方式运行。我至少从未使用过它。