5

当银行服务器发送 500 时,有什么方法可以停止满足 HAProxy 对服务器的进一步请求?

当服务器接收到类似 SIGINT 的信号时,它将开始提供 "500 Server Internal Error" 。那么当 HAProxy 检测到来自服务器的 500 响应时,它是否能够停止对服务器的进一步请求?

服务器部分默认启用一个宏“on-error”。尝试并没有产生任何结果。例如:

server nucleus_server1 127.0.0.1:12341 check on-error mark-down

.宏 on-mark-down 不适用于此。

有任何想法吗?

4

2 回答 2

8

如果您希望 HAProxy 根据此服务器发送的返回码将服务器标记为 DOWN,请在服务器定义中添加“观察 layer7”选项。对于您的示例,它可能如下所示:

server nucleus_server1 127.0.0.1:12341 check on-error mark-down observe layer7 error-limit 1

这意味着如果 nucleus_server1 向任何客户端请求返回 500,它将从池中删除。通过“错误限制”,您可以配置必须返回多少个 500 才能将此服务器标记为“关闭”。

如果内部 HAProxy 检查成功(默认为 2 次),服务器将再次标记为“UP”。

查看:检查、下降、提升、错误限制,观察 HAProxy 文档中的选项以获取更多信息。

于 2014-02-28T17:45:35.517 回答
6

你在使用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

where/_health返回一个好的状态码。

于 2013-03-27T21:03:43.833 回答