我正在尝试研究以下情况下负载平衡长时间运行的TCP连接的最佳方法:
我们有多台服务器在一组冗余的防火墙之后,并且客户端build立长期运行(通常是10-15小时)的TCP连接到我们的后端服务器。
目前,“负载均衡”是通过客户端循环方法处理的,通过一系列IP地址,这些IP地址全部驻留在我们的防火墙中,并相应地NAT到后端服务器。
我想摆脱这种方式,只有一个公共IP,并有一个单独的负载平衡器,可以检查服务器的健康/负载,并相应地分配传入的客户端连接请求。
这里的一个问题是,每个客户端在3个不同的端口上build立3个套接字连接,我更喜欢这些连接是“粘性”的,所以这3个连接请求都发送到同一个后端服务器。
我一直在看例如HAProxy,但我不确定是否真的适合我的情况。 我们有一个相对较低的连接数(~300个客户端*每个3套接字连接)。 通常我们会看到每个sockets的连续数据传输量〜15KB / s。
任何input这是非常感谢!
谢谢,
汤姆
假设所有的后端机器都是“主动”的,并且能够响应请求,所有你真正需要的是一个负载均衡器的前端。
一个好的负载均衡器将能够跟踪到每个主机的连接数量,并dynamic分配新的连接,以避免淹没后端系统之一(“好”,我的意思是“昂贵”,如思科内容交换机/内容交换机服务模块)。 价格与这里的function齐头并进:内容交换机在解决scheme层面上相当高。
我没有使用HAProxy的经验,但是听起来像内容交换机可以实现最小连接负载平衡,所以这可能是一个不错的select(而且价格更具吸引力)。 我不确定HAProxy是否可以执行源跟踪(将所有连接从同一个IP发送到相同的后端)。
在pf防火墙(或者pfsense自定义发行版)中,可以进行几个步骤来进行负载均衡(随机或循环,我不认为他们可以像内容交换机那样做“加权最less连接”作为平衡选项)。 源跟踪是以pf实现的,尽pipe您可能需要保留这些信息的时间,以避免连接从一台服务器移到另一台服务器时出现问题。
如果您已经在使用pf / pfsense作为防火墙,那么这是一个免费的选项:我们在当前的部署中使用这个方法的结果很好,但是我们的连接并不像您的那样长。
其他人已经成功实现了HAProxy,甚至可以帮助运行StackExchange站点。 其他stream行的Web前端是Nginx和英镑 。 最终,大多数这些解决scheme对于大多数Webstream量都是非常有效的。
如果您的目标是高可用性和负载平衡,则粘性或持久性会话是不好的build议,因为它们会降低两者的有效性。
不知道更多关于您的架构或stream量types,我会推荐LVS ,这是我的首选解决scheme。 您指的是networking层,这是负载平衡解决scheme更集中的地方。 它可以与大多数协议一起使用,不限于Web通信。