我正在设置一个应用程序来使用虚拟机(可能是亚马逊,但不是一成不变的),这将需要HTTP负载平衡和负载均衡大量(50k左右,如果可能的话)持久的TCP连接。 数据量并不是很高,但更新频繁。
现在我正在评估负载均衡器,并且对HAProxy的体系结构有点困惑。 如果我使用HAProxy来平衡TCP连接,所有产生的stream量是否必须stream经负载平衡器? 如果是这样,另一种解决scheme(如LVS甚至nginx_tcp_proxy_module)是否更适合?
HAProxy(像许多负载平衡器)通常保持两个对话。 代理与客户端有一个会话(在这种情况下是tcp),另一个会话是与服务器的会话。 因此,对于代理,您最终会看到负载平衡器上的连接数量是2倍。 因此所有stream量都stream经负载均衡器。
当涉及到跨多个负载均衡器扩展时,我不认为你需要。 但是,一个实际的,相当简单的方法是使用两个浮动IP和两个IP之间的循环DNS 。 保持活动状态下,如果其中一个负载均衡器closures,另一个将持有两个IP,那么您可以通过这种方式获得高可用性。 这就是说,我认为你会没事的一个有效的haproxy实例与你的负载。
HAProxy缩放非常好。 例如,Stack Exchangenetworking使用维护开放TCP连接的Web套接字。 在发布这篇文章时,我们已经在VMware虚拟机上build立了143,000个TCP套接字,没有任何问题。 虚拟机上的CPU使用率约为7%。
使用HAProxy进行这种设置,确保将maxconn
设置maxconn
足够高。 下面是一些HAProxyconfiguration的例子,让你开始:
frontend fe_websockets bind 123.123.123.123:80 mode tcp log global option tcplog timeout client 3600s backlog 4096 maxconn 50000 default_backend be_nywebsockets backend be_nywebsockets mode tcp option log-health-checks option redispatch option tcplog balance roundrobin server web1 10.0.0.1:1234 server web2 10.0.0.2:1234 timeout connect 1s timeout queue 5s timeout server 3600s
是的,所有stream量都应该正常通过负载均衡器。 请求由负载均衡器接收,并将响应发回给负载均衡器,负载均衡器将这些请求发送回客户端。
对于select正确的工具,我没有太多的其他select的经验。 我使用haproxy,它非常好,稳定,可以处理大量的stream量。 而且,它的ACLfunction非常好。
有可能使用和configurationDSR(直接服务器返回),但这与Loadbalancer无关,但在tcp-stack(路由表)中configuration。 我们一直在使用它来build立一个大型的videostream媒体门户。 虽然它的工作原理会给你带来很大的麻烦,因为路由的复杂性是必要的。
因此,我不会推荐使用这种技术,而不是非常彻底地考虑使用和缺点。
也许有一些提示开始在那里:
玩的开心!