在HA Proxy中对TCP服务器使用HTTP健康检查



假设我有一个tcp服务器在localhost:9000上运行,一个HTTP服务器在localhost:8000上运行。HTTP服务器公开一个URL"/healthz",如果tcp服务器正常,则返回200,如果tcp服务器不正常,则返回500。即执行:

curl localhost:9000/healthz

将返回状态200或状态500,具体取决于TCP服务器的运行状况。

我希望HAProxy使用localhost:8000/healthz作为tcp服务器的健康检查。这可能吗?

回答这个问题,以防有人来这里寻找答案。

我本以为这不会工作,因为你混合HTTP和TCP,但它似乎是可能的。我刚刚测试了v1.4.24。诀窍是在后端指定一个不同的端口来检查服务器行。下面是一段适合我的配置代码。

<>之前前端httpfrontend结合*:8080http方式选择httplogdefault_backend http-backend后端http-backend此平衡循环http方式选择httplog选择httpclosereqadd x - forward - proto: http服务器server1 localhost:8000前端tcpfrontend结合*:1080tcp方式选择tcplogdefault_backend tcp-backend后端tcp-backendtcp方式选择tcplog#指定要在后端运行的健康检查格式HTTP/1.0rnUser-agent: LB-Check TCP# check ->打开此服务器的检查# port 8000 ->将支票发送到后端服务器的端口8000(而不是9000)# inter 60000 ->每隔60秒检查一次服务器server1 localhost:9000检查端口8000 inter60000

这适用于我的版本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

最新更新