假设我在localhost:9000上运行tcp服务器,在localhost:8000上运行HTTP服务器。 HTTP服务器公开URL" / healthz"如果tcp服务器正常,则返回200;如果tcp服务器不健康,则返回500。也就是说,执行:
curl localhost:9000/healthz
将返回状态200或状态500,具体取决于tcp服务器的运行状况。
我希望HAProxy使用localhost:8000 / healthz作为tcp服务器的运行状况检查。这可能吗?
答案 0 :(得分:4)
回答这个问题,以防有人来这里寻找答案。
我会认为这不会起作用,因为你正在混合使用HTTP和TCP,但它似乎是可能的。我刚用v1.4.24测试过。诀窍是指定一个不同的端口来检查后端的服务器行。这是一个适合我的配置片段。
frontend httpfrontend bind *:8080 mode http option httplog default_backend http-backend backend http-backend balance roundrobin mode http option httplog option httpclose reqadd X-Forwarded-Proto:\ http server server1 localhost:8000 frontend tcpfrontend bind *:1080 mode tcp option tcplog default_backend tcp-backend backend tcp-backend mode tcp option tcplog # specify the format of the health check to run on the backend option httpchk GET /healthz HTTP/1.0\r\nUser-agent:\ LB-Check\ TCP # check -> turn on checks for this server # port 8000 -> send the checks to port 8000 on the backend server (rather than 9000) # inter 60000 -> check every 60s server server1 localhost:9000 check port 8000 inter 60000
答案 1 :(得分:3)
这适用于版本1.4.24(与@chrskly相同),没有任何技巧:
listen service 0.0.0.0:80
mode tcp
balance roundrobin
option tcplog
option httpchk GET http://service.com/healthcheck
server server1.service.com 192.168.0.101:80 check inter 2000
server server2.service.com 192.168.0.102:80 check inter 2000