我正在尝试研究针对以下场景对长时间运行的 TCP 连接进行负载平衡的最佳方法:
我们在一组冗余防火墙后面有多个服务器,客户端与我们的后端服务器建立长时间运行(通常为 10-15 小时)的 TCP 连接。
目前,“负载平衡”是通过客户端循环方法处理的,以遍历所有位于我们防火墙上的 IP 地址列表,并相应地对后端服务器进行 NAT。
我希望摆脱这种方法,只使用一个公共 IP,并有一个单独的负载均衡器,可以检查服务器的运行状况/负载并相应地分配传入的客户端连接请求。
这里的一个问题是,每个客户端在 3 个不同的端口上建立 3 个套接字连接,我希望这些连接是“粘性的”,因此所有这 3 个连接请求都会发送到同一个后端服务器。
我一直在研究 HAProxy,但我不确定它是否真的适合我的场景。我们的连接数相对较低(~300 个客户端 * 每个客户端 3 个套接字连接)。通常我们看到每个套接字的连续数据传输量约为 15KB/s。
非常感谢您对此事的任何意见!
谢谢,
汤姆
答案1
假设您所有的后端机器都是“活动的”并且能够响应请求,那么您真正需要的只是一个负载平衡器前端。
良好的负载平衡器将能够跟踪到每个主机的连接数,并动态分配新连接,以避免淹没后端系统之一(“良好”是指“昂贵”,如 Cisco 内容交换机/内容交换机服务模块)。价格与功能密切相关:内容交换机在解决方案层中处于相当高的位置。
我没有使用过 HAProxy,但听起来它可以像内容交换机一样实现最小连接负载平衡,因此这可能是一个不错的选择(而且价格更具吸引力)。但我不确定 HAProxy 是否可以进行源跟踪(将来自同一 IP 的所有连接发送到同一后端)。
往下几步普法防火墙(或普福斯自定义分发)可以进行负载平衡(随机或循环,我不认为它们可以像内容交换机那样将“加权最少连接”作为平衡选项)。源跟踪是在 pf 中实现的,但您可能需要研究保留该信息的时间,以避免连接从一台服务器移动到另一台服务器时出现问题。
如果您已经使用 pf/pfsense 作为防火墙,这是一个免费的选项:我们在当前部署中使用它,效果很好,但我们的连接不像您的那样长寿。