0%

EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡-CSDN博客

Excerpt

文章浏览阅读1.6k次,点赞10次,收藏9次。有特殊需求,希望同一个客户端连接至同一个服务器,则可以使用 IP Hash 策略。部署的服务器存在性能差异,我们可以通过配置权重 weight 来修改轮询的几率。本例单机集群部署使用三个节点,分别为node1、node2、node3。3 创建docker-compose.yml文件。最小连接数策略,优先分配给获得连接数较少的服务器。随机轮询就是从待选列表中随机分配连接。6 配置Nginx的负载均衡策略。默认用户名: admin。默认密码: public。7 扩展其他负载均衡策略。IP Hash 策略。


Hoking 于 2023-11-25 17:15:32 发布

本例单机集群部署使用三个节点,分别为node1、node2、node3

一、安装与配置

1 创建数据目录

1
2
3
4
5
mkdir -p node1/data node1/logs

mkdir -p node2/data node2/logs

mkdir -p mode3/data node3/logs

2 数据目录授权

1
2
3
4
5
6
7
chown 1000 node1/ node2/ node3/

chown 1000 node1/data/ node1/logs/

chown 1000 node2/data/ node2/logs/

chown 1000 node3/data/ node3/logs/

3 创建docker-compose.yml文件

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
version: '3'

services:

emqx1:

image: emqx:5.3.1

container_name: emqx1

environment:

- "EMQX_NODE_NAME=emqx@node1.emqx.io"

- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"

- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io,emqx@node3.emqx.io]"

healthcheck:

test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]

interval: 5s

timeout: 25s

retries: 5

networks:

emqx-bridge:

aliases:

- node1.emqx.io

ports:

- 1883:1883

- 8083:8083

- 8084:8084

- 8883:8883

- 18083:18083

volumes:

- /etc/localtime:/etc/localtime:ro

- ./node1/logs:/opt/emqx/log

- ./node1/data:/opt/emqx/data

emqx2:

image: emqx:5.3.1

container_name: emqx2

environment:

- "EMQX_NODE_NAME=emqx@node2.emqx.io"

- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"

- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io,emqx@node3.emqx.io]"

healthcheck:

test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]

interval: 5s

timeout: 25s

retries: 5

networks:

emqx-bridge:

aliases:

- node2.emqx.io

ports:

- 1873:1883

- 8073:8083

- 8074:8084

- 8873:8883

- 18073:18083

volumes:

- /etc/localtime:/etc/localtime:ro

- ./node2/logs:/opt/emqx/log

- ./node2/data:/opt/emqx/data

emqx3:

image: emqx:5.3.1

container_name: emqx3

environment:

- "EMQX_NODE_NAME=emqx@node3.emqx.io"

- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"

- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io,emqx@node3.emqx.io]"

healthcheck:

test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]

interval: 5s

timeout: 25s

retries: 5

networks:

emqx-bridge:

aliases:

- node3.emqx.io

ports:

- 1863:1883

- 8063:8083

- 8064:8084

- 8863:8883

- 18063:18083

volumes:

- /etc/localtime:/etc/localtime:ro

- ./node3/logs:/opt/emqx/log

- ./node3/data:/opt/emqx/data

networks:

emqx-bridge:

driver: bridge

4 启动运行EMQX

1
docker-compose up -d

5 EMQX的Dashboard访问地址 http://${ip}:${port}   参考:http://192.168.1.xxx:18083/

默认用户名: admin

默认密码: public

登录后提示修改密码

6 配置Nginx的负载均衡策略

nginx.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

stream {

upstream emqx_tcp_cluster {

server 10.10.1.100:1883 weight=1 max_fails=3 fail_timeout=30s;

server 10.10.1.110:1873 weight=1 max_fails=3 fail_timeout=30s;

server 10.10.1.120:1863 weight=1 max_fails=3 fail_timeout=30s;

}

server {

listen 1893;

proxy_pass emqx_tcp_cluster;

proxy_buffer_size 8k;

tcp_nodelay on;

}

}

7 扩展其他负载均衡策略

随机轮询

随机轮询就是从待选列表中随机分配连接

1
2
3
4
5
6
7
8
9
10
11
12
13
upstream emqx_tcp_cluster {

random;

# emqx的三个实例

server 10.10.1.100:1883;

server 10.10.1.110:1873;

server 10.10.1.120:1863;

}

带权轮询

部署的服务器存在性能差异,我们可以通过配置权重 weight 来修改轮询的几率

1
2
3
4
5
6
7
8
9
10
11
upstream emqx_tcp_cluster {

# emqx的三个实例

server 10.10.1.100:1883 weight=1;

server 10.10.1.110:1873 weight=2;

server 10.10.1.120:1863 weight=3;

}

least_conn 策略

最小连接数策略,优先分配给获得连接数较少的服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
upstream emqx_tcp_cluster {

least_conn;

# emqx的三个实例

server 10.10.1.100:1883;

server 10.10.1.110:1873;

server 10.10.1.120:1863;

}

IP Hash 策略

有特殊需求,希望同一个客户端连接至同一个服务器,则可以使用 IP Hash 策略

1
2
3
4
5
6
7
8
9
10
11
12
13
upstream emqx_tcp_cluster {

ip_hash;

# emqx的三个实例

server 10.10.1.100:1883;

server 10.10.1.110:1873;

server 10.10.1.120:1863;

}