基于 http 状态的 HaProxy 故障转移

Sha*_*awn 1 load-balancing haproxy

遇到特定的 http 状态代码时是否可以进行 HaProxy 故障转移?

如果 tomcat 服务器本身停止/失败,我有以下通用 haproxy 代码可以正常工作。但是,当从 tomcat 中也遇到http 状态代码502 Bad Gateway或500 Internal Server Error时,我想进行故障转移。即使在任何节点中遇到 500、404 状态代码,以下配置仍将继续发送流量。

backend db01_replication
  mode http
  bind 192.168.0.1:80
  server app1 10.0.0.19:8080 check inter 10s rise 2 fall 2
  server app2 10.0.0.11:8080 check inter 10s rise 2 fall 2
  server app3 10.0.0.13:8080 check inter 10s rise 2 fall 2
Run Code Online (Sandbox Code Playgroud)

提前致谢

Sha*_*awn 6

我发现以下 HaProxy http-check可以解决基于 http 状态代码的负载平衡问题。

# Only accept status 200 as valid
http-check expect status 200

# Consider SQL errors as errors
http-check expect ! string SQL\ Error

# Consider all http status 5xx as errors
http-check expect ! rstatus ^5
Run Code Online (Sandbox Code Playgroud)

为了在遇到 500 错误时进行故障转移,HaProxy 配置如下所示:

backend App1_replication
 mode http
 bind 192.168.0.1:80
 http-check expect ! rstatus ^5
 server app1 10.0.0.19:8080 check inter 10s rise 2 fall 2
 server app2 10.0.0.11:8080 check inter 10s rise 2 fall 2
 server app3 10.0.0.13:8080 check inter 10s rise 2 fall 2
Run Code Online (Sandbox Code Playgroud)

来源 https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#http-check%20expect