Answers:
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
可以使用和配置DSR(直接服务器返回),但这与Loadbalancer无关,而是在tcp-stack(路由表)中进行配置。我们一直在将其用于大型视频流转门户。尽管它起作用了,但是它将使您对所需路由的复杂性产生极大的头痛。
因此,我不建议您在未非常全面地考虑使用和缺点的情况下使用此技术。
也许有一些开始的提示:
玩得开心!