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
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;
}
|