使用持久化TCP连接的HAProxy中的TCP负载均衡

6
目前,我有一个单独的客户端(组件)与服务器(另一个组件)有一个持久的TCP连接,并且消息是异步交换的。我想要一个负载均衡器(最好是HAProxy),其中客户端和负载均衡器之间的连接以及负载均衡器和多个服务器之间的连接都是持久的TCP连接。
我知道HAProxy可以很容易地设置TCP负载平衡,但我想知道它是否支持开箱即用的持久连接。如果有人能指点我正确的方向,那将是非常有帮助的。谢谢。

1
这个问题可能应该发布在Server Fault,而不是在这里,尽管这是一个困难的区分,因为HAProxy的配置体现了许多种按照定义顺序执行的逻辑,这可能被解释为“编程”。不幸的是,您没有展示任何“代码”(配置)或尝试获取所需行为并解释发生了什么意外情况。而且,“持久”到底是什么意思也不清楚。您可能指的是长时间运行(受支持)或粘性(非常不同,但也受支持)。能否澄清一下? - Michael - sqlbot
2个回答

6

是的,它支持开箱即用的持久化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

希望这能帮到您。

2
您还需要确保timeout tunnel和其他相关计时器没有比预期更短的默认值,因为它们在触发时会关闭没有流量的连接。 - Michael - sqlbot
我不清楚 - 这个配置中的哪个选项可以平衡单个连接的TCP数据包在服务器之间的分配?我尝试了一个简单的示例,使用netcat将一个大文件传输到HA代理,但所有数据都只被发送到了一个服务器。 - Sridhar Sarnobat
我刚刚尝试了使用 HA Proxy 2.0.4,但配置语法无法正常工作。 'listen' 无法处理意外参数。 - Sridhar Sarnobat

2
这是不可能的。TCP是一种有状态协议。即使我们通过一些技巧来实现,比如使用iptables镜像,目标后端主机也会丢弃没有握手或预包的数据包。
你需要考虑使用UDP。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接