我在只有2个后端服务器的前面设置了HAProxy,并进行了特殊配置:任何请求都应发送到服务器A;但是,如果服务器A返回5xx错误代码,则所有请求都应转到备份服务器B。当A返回“启动”时,所有请求都应转到A。
我正在尝试此配置:
backend example_cluster
balance roundrobin
option httpclose
option forwardfor
option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
http-check disable-on-404
default-server error-limit 1 on-error mark-down
redirect scheme https if !{ ssl_fc }
server node1 1.2.3.4:80 check observe layer7
server node_back 5.6.7.8:443 backup ssl verify none
但这不起作用有两个原因:
- 即使node1(A)已启动,所有请求也都路由到服务器node_back(B)。
- 似乎没有对服务器A执行任何httpcheck;或更好,在syslog中,我看不到有关服务器A关闭的任何错误。
如果删除“ option httpchk”行以及该行下面的两行;并且我还删除了服务器A中的“观察层7”;HAProxy通过将所有请求路由到节点A来工作。但是,显然,当服务器A返回500时,HAProxy不会切换到B。因此,我假设问题可能出在选项httpchk配置中。
1
用nginx完全可以做到。实际上,我避免在Web平衡上使用haproxy,因为Nginx是Web服务器,因此更加灵活和简单。但是,由于最初的问题是关于haproxy的,所以我无权提供有关nginx的答案。但是,如果您愿意,我可以。毕竟,快一年过去了,我想您还是找到了解决方案。
—
drookie