扩展HAProxy以支持超过64k的WebSocket


8

我们正在尝试设计一种能够处理超过64k WebSocket的体系结构。

我们首先尝试使用Amazon ELB,但其设计不允许流量或Websocket意外增加。(TCP模式意外使WebSocket超时)

使用HAProxy时,这些限制将不适用,但我们仅限于在HA与后端服务器之间维护的约64k websocket。

我想到了多种解决方案:

  • 多个HAProxy实例,使用DNS进行负载平衡(Route53具有加权选项)
  • 两个具有Keepalived,多个内部IP地址的HAProxy实例(不确定它是否可行)

有一个更好的方法吗 ?


1
为什么限制为64k?是源端口吗?如果是这种情况,您可以向绑定到不同端口的后端添加更多“服务器” ...
Kyle Brandt 2014年

@ Bastien974,最简单的方法是使用后端不同的IP地址,以扩展到130K连接,我使用了两个IP地址和tw_reuse sysctl选项
c4f4t0r

Answers:


7

如果您的64k限制是由于源端口而引起的,则可以执行以下操作(有点hacky,但这是我们目前在SE上针对websocket进行的操作(通常有0.5百万并发与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本身不会为您提供负载平衡(这里还有更多选择,这很简单)。


1
如果我理解正确,因为TCP连接是由srcIP:srcPORT / destIP:destPORT定义的,所以如果我能够在多个端口上侦听后端服务器,那将意味着我将能够在HAProxy和后端服务器之间从同一个127.0.0.1:12345-> 10.0.0.1:8081,127.0.0.1:12345-> 10.0.0.1:8082具有多个连接?这真的有效吗?
Bastien974

@ Bastien974:您正确理解-它有效。
凯尔·布​​兰特

@ Bastien974:您可以source 0.0.0.0 usesrc client在haproxy的后端配置中使用tproxy源透明性。这样,srcIP:srcPORT将成为实际的客户端IP /端口(而不是haproxy机器的内部IP),也很容易记录日志。
wqw 2015年

0

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

例如,检查网址以了解如何设置此类布局


我不太确定这是否可以在AWS VPC基础架构中使用,因为我需要使用与每个实例关联的弹性IP。您的解决方案将非常接近DNS,因为Amazon Route53提供了添加运行状况检查的选项。我担心的是,即使TTL低,我们也无法等待传播到其他国家(我们在全球有客户)停止发送流量到“死” HA实例。
Bastien974
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.