Session haproxy http负载平衡和状态处理

Session haproxy http负载平衡和状态处理,session,nginx,tcp,haproxy,Session,Nginx,Tcp,Haproxy,我无法清楚地理解Haproxy如何在http模式下执行健康检查 如果第一个服务器返回了一些错误状态代码(例如503),我需要将http请求重新发送到另一个服务器(后端服务器列表中的下一个)。 我需要Haproxy的以下行为: 1) 我收到一些HTTP请求 2) 我将它发送到第一台服务器 3) 如果我得到503(或其他错误代码),这个HTTP请求必须发送到下一个服务器 4) 若它返回200个代码,则此tcp会话的下一个http请求将转到第一个服务器 我知道在nginx中很容易实现(我想是在上游使用

我无法清楚地理解Haproxy如何在http模式下执行健康检查

如果第一个服务器返回了一些错误状态代码(例如503),我需要将http请求重新发送到另一个服务器(后端服务器列表中的下一个)。 我需要Haproxy的以下行为: 1) 我收到一些HTTP请求 2) 我将它发送到第一台服务器 3) 如果我得到503(或其他错误代码),这个HTTP请求必须发送到下一个服务器 4) 若它返回200个代码,则此tcp会话的下一个http请求将转到第一个服务器

我知道在nginx中很容易实现(我想是在上游使用代理)。但我需要使用Haproxy,因为我需要连接的软件在第4层工作,我无法更改它,所以它需要在同一tcp会话中保持http消息组。我可以在haproxy中将它们保持在同一个会话中,但在nginx中不能

我知道httpchkobserve,但它们不是我需要的。 第一个允许我发送一些http请求,而不是我收到的http请求(我需要分析http流量以确定我将回答的http状态)。 Second将我的服务器标记为死机,不再向它发送消息,但我需要对这些消息进行分析。 我确实需要像nginx这样的行为,但是能够在tcp会话中包含http消息。 也许有一些很好的方法可以用ACL来实现它

有人能详细解释一下haproxy是如何在http模式下处理负载平衡的,或者为我的问题提供一些解决方案吗

更新: 例如,当我尝试使用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
谢谢,
Dmitry

您可以使用
选项httpchk

当指定“option httpchk”时,将发送一个完整的HTTP请求 一旦TCP连接建立,响应2xx和3xx将被删除 被认为是有效的,而所有其他的都表示服务器出现故障, 包括没有任何回应


来源:

请发布您的配置,@Tan Hong Tat事实上,我还没有编写好的配置,因为我不知道如何实现它。但是,我在我的帖子后面附加了我在尝试使用“观察”时使用的配置,我在帖子中已经提到了httpchk。httpchk将发送什么消息?我需要发一些信息。我需要重新发送消息haproxy ReceiveDhtpchk将返回HTTP状态,非2xx和3xx将向下一个可用服务器发送请求。
listen zti 127.0.0.1:1111
mode        http
balance     roundrobin
option      httpchk HEAD / HTTP/1.0
server      zti_1 127.0.0.1:4444 check inter 5s rise 1 fall 2
server      zti_2 127.0.0.1:5555 check inter 5s rise 1 fall 2