为超过64k的websockets规模HAProxy

我们正试图devise一个能够处理超过64k的websocket的架构。

我们首先尝试与亚马逊ELB,但其devise不允许意外的交通高峰或websocket。 (TCP模式意外地超时了websockets)

使用HAProxy,这些限制不适用,但我们将被限制在HA和后端服务器之间维护的约64k个WebSockets。

想到多种解决scheme:

  • 多个HAProxy实例,负载平衡与DNS(Route53有一个加权选项)
  • 两个HAProxy实例Keepalived,多个内部IP地址(不知道它是否可行)

有没有更好的方法来做到这一点?

如果你的64k限制是源于源端口的话,你可以做一些类似下面的事情(有点不好意思,但是现在我们在SE上是用websockets做的(通常和HAProxy有类似的。

server ny-web01-1 10.0.0.1:8081 check server ny-web01-2 10.0.0.1:8082 check server ny-web01-3 10.0.0.1:8083 check 

多个实例也可以通过keepalived来实现。 只需在多个IP上进行循环DNS即可。 只要确保IP总是被活动的负载平衡器所取代,因为DNS本身不会给你负载平衡(这里也有更多的select,这个只是简单的)。

您可以使用Anycast和BGP或其他边界路由协议来设置多个共享相同IP的HAproxy系统。 这样所有的HAproxy系统都处于活动状态; 如果其中任何一个发生故障,你停止在该系统上发布BGP路由,并且在大约30秒内停止接收stream量。 将被重新分配给广告相同范围的其他可用系统。

例如检查这个 URL如何设置这样的布局