Socket.IO负载均衡

架构

Nginx配置

为了负载均衡时连接保证始终连到一个节点上,使用Nginx的ip_hash实现session sticky,让客户端始终连接到集群内一台节点上。

在Nginx的conf.d目录下创建配置文件socket_io.conf,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
upstream nodejs_websocket {
ip_hash;
server 192.168.1.100:3000;
server 192.168.1.101:3000;
}

server {
listen 80;
server_name 127.0.0.1 localhost;
access_log off;
add_header Content-Type "text/html; charset=UTF-8";

location / {
proxy_pass http://nodejs_websocket;

proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

由于Nginx的反向代理机制和Socket.IO的自动重连机制,上述架构还具备高可用的特性,即当某个节点宕机时,原先连接到该节点上的客户端会自动重连至其它节点上。