当班克服务器发送500个服务器时,有没有办法停止向HAProxy服务器提供进一步的请求?
当服务器收到SIGINT之类的信号时,它将开始提供“500 Server Internal Error”。因此,当HAProxy从服务器检测到500响应时,是否能够停止对服务器的进一步请求?
在服务器部分默认启用宏“on-error”。尝试这不会产生任何结果。例如:
server nucleus_server1 127.0.0.1:12341 check on-error mark-down
。宏标记下降与此无关。
有什么想法吗?
答案 0 :(得分:6)
如果您希望HAProxy根据此服务器发送的返回代码将服务器标记为DOWN,请在服务器定义中添加“observe layer7”选项。对于您的示例,它可能看起来像:
server nucleus_server1 127.0.0.1:12341 check on-error mark-down observe layer7 error-limit 1
这意味着如果nucleus_server1向任何客户端请求返回500,它将从池中删除。通过'error-limit',您可以配置必须返回多少500个以将此服务器标记为“DOWN”。
如果内部HAProxy检查成功(默认为2次),服务器将再次标记为“UP”。
查看:检查,降低,提升,错误限制,观察HAProxy文档中的选项以获取更多信息。
答案 1 :(得分:5)
您使用的是httpchk
选项吗?对于非2xx或3xx的响应,它将失败,并且HAProxy将停止向该计算机发送流量。
# Relay HTTPS traffic to Apache instance and check service availability
# using HTTP request "OPTIONS * HTTP/1.1" on port 80.
backend https_relay
mode tcp
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
server apache1 192.168.1.1:443 check port 80
但它可以很简单:
option httpchk GET /_health
其中/_health
返回正确的状态代码。