HaProxyconfiguration来平衡Node Js – WebSockets

我刚刚在Debian系统上安装了HaProxy 1.6,我想用它来分发WebSocket(WS://)连接。 系统运行同一WebSocket服务的5个服务器实例; 这些实例具有相同的IP地址但不同的端口:

192.168.10.1:801 192.168.10.1:802 192.168.10.1:803 192.168.10.1:804 192.168.10.1:805 

我正在寻找一些build议来创build一个简单的configuration文件来侦听端口800上的请求,并在服务器之间平均分配(也许?)。

 defaults mode http # Set timeouts to your needs timeout client 5s timeout connect 5s timeout server 5s frontend all 0.0.0.0:800 mode http timeout client 120s option forwardfor # Fake connection:close, required in this setup. option http-server-close option http-pretend-keepalive acl is_sockjs path_beg /echo /broadcast /close acl is_stats path_beg /stats use_backend sockjs if is_sockjs use_backend stats if is_stats default_backend static backend sockjs # Load-balance according to hash created from first two # directories in url path. For example requests going to /1/ # should be handled by single server (assuming resource prefix is # one-level deep, like "/echo"). balance uri depth 2 timeout server 120s server srv_sockjs1 127.0.0.1:12345 # server srv_sockjs2 127.0.0.1:9998 backend static balance roundrobin server srv_static 127.0.0.1:801 backend stats stats uri /stats stats enable 

我设法通过使用上面我已经下载的configuration文件以某种方式工作。但它看起来对我来说太复杂了,一次只接受一个连接。 如果第二个客户端连接,HA代理断开前一个/第一个,并连接一个新/秒。

最简单的方法是为所有websocket机器定义一个后端,并像下面这样绕过它们:

 frontend ft_web bind 192.168.10.1:800 name http maxconn 10000 default_backend bk_web backend bk_web balance roundrobin server websrv1 192.168.10.1:801 maxconn 10000 weight 10 cookie websrv1 check server websrv2 192.168.10.1:802 maxconn 10000 weight 10 cookie websrv2 check ... 

如果没有帮助,看起来你的超时时间太短了,试着把它们全部定义如下:(默认情况下)

  timeout client 25s timeout connect 5s timeout server 25s # timeout tunnel available in ALOHA 5.5 or HAProxy 1.5-dev10 and higher timeout tunnel 3600s timeout http-keep-alive 1s timeout http-request 15s timeout queue 30s timeout tarpit 60s