负载均衡 – 在与HAProxy一起使用TCP负载均衡时,所有出站流量是否都流经LB?

我正在设置一个使用虚拟机托管的应用程序(可能是亚马逊,但这不是一成不变的),这将需要HTTP负载平衡和负载平衡大量(50k左右,如果可能)的持久TCP连接.数据量不是很高,但更新频繁.

现在我正在评估负载平衡器,对HAProxy的架构有点困惑.如果我使用HAProxy来平衡TCP连接,那么所有产生的流量是否必须流经负载均衡器?如果是这样,另一种解决方案(例如LVS甚至nginx_tcp_proxy_module)会更合适吗?

最佳答案
HAProxy(与许多负载平衡器一样)通常保持两个对话.代理在客户端有一个会话(在本例中为tcp),与服务器有另一个会话.因此,使用代理,您最终会在负载均衡器上看到2倍的连接.因此,所有流量都流经负载均衡器.

当涉及到跨多个负载平衡器的扩展时,我认为你不需要.但是,实现这一目的的一种实用且相当简单的方法是使用两个浮动IP和两个IP之间的循环DNS进行keepalived.使用keepalived,如果其中一个负载平衡器发生故障,另一个负载均衡器将保留两个IP,因此您可以通过这种方式获得高可用性.话虽这么说,我认为你的负载一个活跃的haproxy实例你会没事的.

HAProxy非常好.例如,Stack Exchange网络使用维护开放TCP连接的Web套接字.在发布此消息时,我们在VMware虚拟机上有143,000个已建立的TCP套接字,没有任何问题. VM上的CPU使用率约为7%.

通过HAProxy进行这种设置,请确保将maxconn设置得足够高.以下是一些示例HAProxy配置,可帮助您入门:

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

转载注明原文:负载均衡 – 在与HAProxy一起使用TCP负载均衡时,所有出站流量是否都流经LB? - 代码日志