Die*_*ego 5 load-balancing haproxy node.js socket.io
我有几个socket.io实例,在HAProxy下运行身份验证,我需要强制认证请求和套接字连接转到同一个实例.我已根据对SO问题的答案设置了HAProxy,并进行了一些修改,如下所示:
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
nbproc 2
defaults
mode http
frontend all 0.0.0.0:80
timeout client 86400000
default_backend www_backend
acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend socket_backend if is_websocket
backend www_backend
balance url_param sessionId
option forwardfor # This sets X-Forwarded-For
timeout server 30000
timeout connect 4000
server server1 localhost:8081 weight 1 maxconn 1024 check
server server2 localhost:8082 weight 1 maxconn 1024 check
server server3 localhost:8083 weight 1 maxconn 1024 check
backend socket_backend
balance url_param sessionId
option forwardfor # This sets X-Forwarded-For
timeout queue 5000
timeout server 86400000
timeout connect 86400000
server server1 localhost:8081 weight 1 maxconn 1024 check
server server2 localhost:8082 weight 1 maxconn 1024 check
server server3 localhost:8083 weight 1 maxconn 1024 check
Run Code Online (Sandbox Code Playgroud)
我已经尝试过url_param(其中sessionId是在身份验证调用和websocket连接中传递的查询字符串参数)和source作为余额选项,但似乎HAProxy只允许这些选项用于HTTP连接,因此忽略它们用于实际的websocket连接.结果是,有时auth请求和套接字连接最终在不同的服务器中,这对我们的应用程序来说是不可接受的.
是否有某种方法可以实现这种期望的行为?
小智 9
我以这种方式使用基于cookie的平衡:
backend socketio
mode http
cookie SIO insert
server sock1 127.0.0.1:8001 cookie 001
server sock2 127.0.0.1:8002 cookie 002
Run Code Online (Sandbox Code Playgroud)
对于 websocket 连接平衡,使用roundrobin
. 由于它是双向套接字(通过 TCP),默认情况下会保持粘性。对于其他传输,使用source
平衡算法是最好的选择。(您可以使用基于cookie的持久性,但socket.io不会将JSESSIONID等发送回代理服务器。如果您想要基于cookie的持久性,您可以尝试sockjs 。)
例子:
#do the same for other transports. [Note in 0.6.x resource was mounted at path: /socket.io/[transport]
acl is_JSONPolling path_beg /socket.io/1/jsonp-polling
use_backend non_websocket if is_JSONPolling
backend non_websocket
balance source
#rest same as the one for websocket backend
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7673 次 |
最近记录: |