【问题标题】:TCP load balancing in HAProxy with persistent TCP connections具有持久 TCP 连接的 HAProxy 中的 TCP 负载平衡
【发布时间】:2018-11-04 10:52:04
【问题描述】:

目前,我有一个客户端(组件)与服务器(另一个组件)有一个持久的 TCP 连接,并且消息是异步交换的。我想要一个负载平衡器(最好是 HAProxy),其中连接 b/w 客户端和负载平衡器以及 b/w 负载平衡器和多个服务器作为持久 TCP 连接。

我知道 HAProxy 可以轻松设置为 TCP 负载平衡,但我想知道它是否支持开箱即用的持久连接。如果有人指出我正确的方向,那将是很大的帮助。谢谢。

【问题讨论】:

  • 这个问题可能应该发布在Server Fault 而不是这里,尽管这是一个很难区分的问题,因为 HAProxy 的配置包含了多种按定义顺序执行的逻辑,可以解释为“编程。”不幸的是,您没有显示任何“代码”(配置)或尝试获得所需的行为以及对意外发生的事情的解释。也不清楚你所说的“持久”到底是什么意思。您的意思可能是长时间运行(受支持)或粘性(非常不同,但也受支持)。澄清一下?

标签: tcp load-balancing haproxy persistent-connection


【解决方案1】:

是的,它支持开箱即用的持久 TCP 连接。 haproxy 中的一个简单实现如下所示

listen tcpProxy 0.0.0.0:7000 
    mode tcp 
    balance source
    server tcp1 ip1:port check maxconn 10000
    server tcp2 ip2:port check maxconn 10000

希望对你有帮助

【讨论】:

  • 您还需要确保timeout tunnel 和任何其他相关计时器的默认值不会比预期的短,因为它们会在触发时断开没有流量的连接。跨度>
  • 我不清楚 - 此配置中的哪个选项可以平衡来自服务器的单个连接的 TCP 数据包?我尝试了一个 hello world 示例 catting 一个大文件通过 netcat 到 HA 代理,所有数据都只发送到一个服务器。
  • 我刚刚在 HA Proxy 2.0.4 上尝试过,配置语法不起作用。 'listen' cannot handle unexpected argument
【解决方案2】:

这是不可能的。 TCP 是一种有状态的协议。即使我们通过一些技巧来做到这一点,例如 iptables 镜像,目标后端主机也会丢弃没有握手或预包的数据包。

您将不得不考虑使用 UDP。

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多