对HA Proxy中的TCP服务器使用HTTP运行状况检查

时间:2014-03-19 07:06:00

标签: haproxy

假设我在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服务器的运行状况检查。这可能吗?

2 个答案:

答案 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