HAProxy - 停止从服务器500上的餐饮请求

Nei*_*eil 3 ubuntu haproxy

当bankend服务器发送500时,有没有办法停止从HAProxy服务器对服务器的进一步请求?

当服务器收到SIGINT之类的信号时,它将开始提供"500 Server Internal Error".因此,当HAProxy从服务器检测到500响应时,是否能够停止对服务器的进一步请求?

在服务器部分中默认启用宏"on-error".尝试这不会产生任何结果.例如:

server nucleus_server1 127.0.0.1:12341 check on-error mark-down
Run Code Online (Sandbox Code Playgroud)

.宏标记下降与此无关.

有任何想法吗?

小智 6

如果您希望HAProxy根据此服务器发送的返回代码将服务器标记为DOWN,请在服务器定义中添加"observe layer7"选项.对于您的示例,它可能看起来像:

server nucleus_server1 127.0.0.1:12341 check on-error mark-down observe layer7 error-limit 1
Run Code Online (Sandbox Code Playgroud)

这意味着如果nucleus_server1向任何客户端请求返回500,它将从池中删除.通过'error-limit',您可以配置必须返回多少500个以将此服务器标记为"DOWN".

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

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


ty.*_*ty. 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
Run Code Online (Sandbox Code Playgroud)

但它可以很简单:

    option httpchk GET /_health
Run Code Online (Sandbox Code Playgroud)

其中/_health返回了良好的状态代码.