首页 文章

haproxy http负载均衡和状态处理

提问于
浏览
0

我无法清楚地了解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中 .

我知道 httpchkobserve ,但它们不是我需要的 . 第一个允许我发送一些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 回答

  • 0

    您可以使用 option httpchk .

    当指定“选项httpchk”时,一旦 Build TCP连接就发送完整的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
    

    资料来源:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#option%20httpchk

相关问题