我无法清楚地了解Haproxy如何在http模式下执行运行状况检查 .
我需要将http请求重新发送到另一个服务器(后端服务器列表中的下一个),如果第一个返回了一些错误状态代码(例如,503) . 我需要Haproxy的以下行为:1)我收到一些HTTP请求2)我将它发送到第一个服务器3)如果我得到503(或其他一些错误代码),这个HTTP请求必须发送到下一个服务器4)如果它返回200个代码,此tcp会话的下一个http请求转到第一个服务器
我知道在nginx中实现起来很容易(我猜想使用proxy_next_upstream) . 但是我需要使用Haproxy,因为我需要连接的软件在第4层工作而我无法更改它,所以它需要在同一个tcp会话中保留http消息组 . 我可以将它们保存在haproxy中的相同会话中,但不能保存在nginx中 .
我知道 httpchk 和 observe ,但它们不是我需要的 . 第一个允许我发送一些http请求,而不是我收到的http请求(我需要分析http流量来决定我将回答的http状态) . 第二次将我的服务器标记为已死并且不再向其发送消息,但是我需要通过分析来获取此消息 . 我真的需要像nginx这样的行为,但能够在tcp会话中拥有http消息 . 可能有一些很好的方法来实现 ACL ?
有谁能请详细解释haproxy如何在http模式下处理负载均衡或为我的问题提供一些解决方案?
UPDATE: 例如,当我尝试使用observe进行操作时,我使用了配置:
global
log 127.0.0.1 local0
maxconn 10000
user haproxy
group haproxy
daemon
defaults
log global
option dontlognull
retries 3
maxconn 10000
contimeout 10000
clitimeout 50000
srvtimeout 50000
listen zti 127.0.0.1:1111
mode http
balance roundrobin
server zti_1 127.0.0.1:4444 check observe layer7 error-limit 1 on-error mark-down
server zti_2 127.0.0.1:5555 check observe layer7 error-limit 1 on-error mark-down
谢谢,德米特里
1 回答
您可以使用
option httpchk
.资料来源:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#option%20httpchk