![Haproxy 后端依赖性检查](https://linux22.com/image/602034/Haproxy%20%E5%90%8E%E7%AB%AF%E4%BE%9D%E8%B5%96%E6%80%A7%E6%A3%80%E6%9F%A5.png)
我有一个分为两个组件的 Web 应用程序。一个是托管在端口 4444 上的 WCF 服务,另一个是通过 IIS 托管在端口 80 上的一组常规 Web 服务。
我已经在 haproxy 中设置了节点,但现在我需要扩展配置以确保如果端口 4444 关闭,端口 80 的运行状况检查会删除一个节点。这是因为在端口 80 上运行的代码期望服务位于 localhost:4444 上,如果 4444 处于离线状态,该代码将失败。如果我配置 haproxys 运行状况检查以检查端口 80 组的端口 4444。当 4444 上的服务未侦听时,它会删除端口 80 节点。但是如果我停止 IIS,则不会删除它。有没有办法配置 haproxy 来检查两个端口,并在其中一个或另一个发生故障时删除服务器?
这是我的配置。
listen WEB80 10.1.1.100:80
mode http
balance roundrobin #round robin it yo
option httpclose
option forwardfor
server Web1 10.1.1.13:80 check port 4444
server Web1 10.1.1.14:80 check port 4444
listen AP4444 10.1.1.100:4444
mode http
balance roundrobin #round robin it yo
option httpclose
option forwardfor
server App1 10.1.1.13:4444 check
server App2 10.1.1.14:4444 check
答案1
这是一个非常老的问题,但我对可能遇到此问题的人有一个建议。
编写一个小的 php/cgi/whatever 脚本来检查端口 4444 是否打开。将所有检查切换为在端口 80 上运行,并使用上面的脚本作为检查。
例如,
listen WEB80 10.1.1.100:80
mode http
balance roundrobin #round robin it yo
option httpclose
option forwardfor
option httpchk GET /check.cgi
server Web1 10.1.1.13:80 check port 80
server Web1 10.1.1.14:80 check port 80
listen AP4444 10.1.1.100:4444
mode http
balance roundrobin #round robin it yo
option httpclose
option forwardfor
option httpchk GET /check.cgi
server App1 10.1.1.13:4444 check port 80
server App2 10.1.1.14:4444 check port 80