我正在设置一个使用 VM(可能是亚马逊,但这不是一成不变的)托管的应用程序,这将需要 HTTP 负载平衡和负载平衡大量(如果可能的话,50k 左右)持久的 TCP 连接。数据量不是很大,但是更新很频繁。
现在我正在评估负载均衡器并且对 HAProxy 的架构有点困惑。如果我使用 HAProxy 来平衡 TCP 连接,所有产生的流量都必须流经负载平衡器吗?如果是这样,另一个解决方案(例如 LVS 甚至 nginx_tcp_proxy_module)是否更合适?
我正在设置一个使用 VM(可能是亚马逊,但这不是一成不变的)托管的应用程序,这将需要 HTTP 负载平衡和负载平衡大量(如果可能的话,50k 左右)持久的 TCP 连接。数据量不是很大,但是更新很频繁。
现在我正在评估负载均衡器并且对 HAProxy 的架构有点困惑。如果我使用 HAProxy 来平衡 TCP 连接,所有产生的流量都必须流经负载平衡器吗?如果是这样,另一个解决方案(例如 LVS 甚至 nginx_tcp_proxy_module)是否更合适?
HAProxy(像许多负载均衡器一样)通常维护两个对话。代理与客户端有一个会话(在本例中为 tcp),另一个与服务器有会话。因此,使用代理后,您最终会在负载均衡器上看到 2 倍的连接。因此,所有流量都流经负载均衡器。
当谈到跨多个负载均衡器进行扩展时,我认为您不需要这样做。但是,一种实用且相当简单的方法是使用类似 keepalived 的方法和两个浮动 IP,并在这两个 IP 之间使用循环 DNS 。使用 keepalived,如果其中一个负载均衡器出现故障,另一个将保留两个 IP,因此您可以通过这种方式获得高可用性。话虽如此,我认为您可以使用一个活动的 haproxy 实例来处理您的负载。
HAProxy 的扩展性非常好。例如,Stack Exchange 网络使用 Web 套接字来维护开放的 TCP 连接。在我发布这篇文章时,我们在 VMware 虚拟机上建立了 143,000 个 TCP 套接字,没有任何问题。VM 上的 CPU 使用率约为 7%。
使用 HAProxy 进行此类设置时,请确保设置
maxconn
得足够高。下面是一些 HAProxy 配置示例,可帮助您入门:是的,所有流量通常都应该通过负载均衡器。请求由负载均衡器接收,响应被发送回负载均衡器,负载均衡器将它们发送回客户端。
对于选择正确的工具,我对其他选项没有太多经验。我正在使用 haproxy,它非常好而且稳定,可以处理大量流量。此外,它的 ACL 功能也很棒。
可以使用和配置 DSR(直接服务器返回),但这与 Loadbalancer 无关,而是在 tcp-stack(路由表)中配置。我们一直在将其用于大型视频流媒体门户。尽管它有效,但它会让您对必要的路由的复杂性感到非常头疼。
因此,如果不非常彻底地考虑用途和缺点,我不建议使用此技术。
也许有一些提示可以从那里开始:
玩得开心!