在HAProxy中使用TCP负载平衡时,是否所有出站流量都流经LB?


19

我正在设置一个使用VM(可能是Amazon,但不是一成不变的)托管的应用,这将需要HTTP负载平衡和大量(持久性)TCP连接的负载平衡(如果可能,则为50k左右)。数据量不是很高,但是更新频繁。

现在,我正在评估负载均衡器,并对HAProxy的架构有些困惑。如果我使用HAProxy平衡TCP连接,是否所有产生的流量都必须流经负载平衡器?如果是这样,其他解决方案(例如LVS甚至Nginx_tcp_proxy_module)是否会更合适?

Answers:


33

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配置示例,可帮助您入门:

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

143,000-还在谈论网络套接字吗?还是其他东西吗?
马克·格雷夫

@MarcGravell:几乎所有的Web套接字。请记住,这是我之前在介绍中所说的2倍,因此Web套接字服务器的总数约为70k
Kyle Brandt

@Kyle-您为什么需要Web套接字和持久的TCP连接的任何原因?该网站似乎没有任何需要的实时功能。
延续2012年

@Continuation:有大量的实时功能,包括收件箱通知,投票,编辑,新评论/答案/问题。不确定是否仅为具有一定代表限制的用户启用了它们,如果看不到它们,则可以在meta.stackoverflow.com上进行查询
Kyle Brandt

1
@KyleBrandt也可以在TCP模式下工作吗?
elslooo

2

是的,所有流量通常应通过负载均衡器。负载平衡器接收请求,并将响应发送回负载平衡器,负载平衡器将请求发送回客户端。

对于选择正确的工具,我对其他选项没有太多经验。我正在使用haproxy,它确实很好而且稳定,可以处理大量流量。此外,它的ACL功能也很棒。


2

可以使用和配置DSR(直接服务器返回),但这与Loadbalancer无关,而是在tcp-stack(路由表)中进行配置。我们一直在将其用于大型视频流转门户。尽管它起作用了,但是它将使您对所需路由的复杂性产生极大的头痛。

因此,我不建议您在未非常全面地考虑使用和缺点的情况下使用此技术。

也许有一些开始的提示:

玩得开心!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.