HAProxy 保持活动平衡问题

HAProxy 保持活动平衡问题

我使用 HAProxy 作为反向代理来平衡节点后端的请求,但出于某种原因,如果客户端发送带有 HTTP keep-alive 的请求,则 TCP 模式下的 HAProxy 不会在后端服务器之间轮换,但 HTTP 模式下的 HAProxy 会轮换。如果客户端关闭了 HTTP keep-alive,则两种模式都会以循环方式平衡每个请求。

这是基本配置:

listen nodes_proxy
        mode tcp
        bind :9090
        balance roundrobin
        timeout client 40s
        timeout server 40s
        retries 1
        retry-on conn-failure
        option redispatch 1
        server node1 x.x.x.x:8080
        server node2 x.x.x.x:8080
        server node2 x.x.x.x:8080

所有后端节点都处于活动状态并正常工作,但 TCP 模式下的 HAProxy 不会对来自同一客户端的每个保持活动的请求进行循环平衡,而 HTTP 模式则会。对于我们的简单用例,我们更喜欢 TCP 模式,但它的平衡效果不如预期。

如何确保来自客户端的每个请求(具有保持活动功能)在循环机制中保持平衡,并且客户端到代理的连接以及代理到服务器的连接保持活动状态以供重复使用,直到超时?

答案1

你描述的是普通的预期的第 4 层代理的连接行为。

在 TCP 模式下,HAProxy 几乎不检查流量,甚至根本不检查,当然也不会尝试读取 HTTP 标头。它只是传递流量。除非一端或另一端断开连接,否则它只会继续传递流量。

如果希望服务器之间实现这样的平衡连接,就必须使用HTTP模式。

相关内容