负载平衡长时间运行的 TCP 连接

负载平衡长时间运行的 TCP 连接

我正在尝试研究针对以下场景对长时间运行的 TCP 连接进行负载平衡的最佳方法:

我们在一组冗余防火墙后面有多个服务器,客户端与我们的后端服务器建立长时间运行(通常为 10-15 小时)的 TCP 连接。
目前,“负载平衡”是通过客户端循环方法处理的,以遍历所有位于我们防火墙上的 IP 地址列表,并相应地对后端服务器进行 NAT。

我希望摆脱这种方法,只使用一个公共 IP,并有一个单独的负载均衡器,可以检查服务器的运行状况/负载并相应地分配传入的客户端连接请求。

这里的一个问题是,每个客户端在 3 个不同的端口上建立 3 个套接字连接,我希望这些连接是“粘性的”,因此所有这 3 个连接请求都会发送到同一个后端服务器。

我一直在研究 HAProxy,但我不确定它是否真的适合我的场景。我们的连接数相对较低(~300 个客户端 * 每个客户端 3 个套接字连接)。通常我们看到每个套接字的连续数据传输量约为 15KB/s。

非常感谢您对此事的任何意见!

谢谢,

汤姆

答案1

假设您所有的后端机器都是“活动的”并且能够响应请求,那么您真正需要的只是一个负载平衡器前端。

良好的负载平衡器将能够跟踪到每个主机的连接数,并动态分配新连接,以避免淹没后端系统之一(“良好”是指“昂贵”,如 Cisco 内容交换机/内容交换机服务模块)。价格与功能密切相关:内容交换机在解决方案层中处于相当高的位置。

我没有使用过 HAProxy,但听起来它可以像内容交换机一样实现最小连接负载平衡,因此这可能是一个不错的选择(而且价格更具吸引力)。但我不确定 HAProxy 是否可以进行源跟踪(将来自同一 IP 的所有连接发送到同一后端)。

往下几步普法防火墙(或普福斯自定义分发)可以进行负载平衡(随机或循环,我不认为它们可以像内容交换机那样将“加权最少连接”作为平衡选项)。源跟踪是在 pf 中实现的,但您可能需要研究保留该信息的时间,以避免连接从一台服务器移动到另一台服务器时出现问题。
如果您已经使用 pf/pfsense 作为防火墙,这是一个免费的选项:我们在当前部署中使用它,效果很好,但我们的连接不像您的那样长寿。

答案2

其他人已经成功实施了 HAProxy,它甚至帮助运行 StackExchange 网站。其他流行的 Web 前端包括Nginx最终,这些解决方案中的大多数对于大多数 Web 流量来说都将非常有效。

如果您的目标是高可用性和负载平衡,粘性或持久会话是不明智的,因为它们会降低两者的有效性。

在不了解你的架构或流量类型的情况下,我建议低压开关柜,这是我首选的解决方案。您指的是网络层,而这正是此负载平衡解决方案更关注的领域。它能够与大多数协议一起使用,并且不仅限于 Web 流量。

相关内容