【发布时间】:2015-08-28 12:09:32
【问题描述】:
我无法清楚地理解 Haproxy 如何在 http 模式下执行健康检查。
如果第一个服务器返回一些错误状态代码(例如,503),我需要将 http 请求重新发送到另一台服务器(后端服务器列表中的下一个)。 我需要 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模式下处理负载平衡或者为我的问题提供一些解决方案?
更新: 例如,当我尝试使用观察来执行此操作时,我使用了配置:
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
谢谢, 德米特里
【问题讨论】:
-
请发布您的配置,
-
@Tan Hong Tat 实际上,我仍然没有编写好的配置,因为我不知道如何实现它。但是,我在帖子中附加了我在尝试使用“观察”做我想做的事情时使用的配置