Docker+Emqx+Nginx集群及负载均衡的搭建 MQTT服务器
1.拉取镜像
docker pull emqx/emqx
2.创建虚拟网络
# -d 参数默认为bridge,可省略
docker network create -d bridge --subnet=172.18.0.0/16 emqx_bridge
3.创建Docker容器
#节点1
docker run -d --hostname emqx01 --name emqx01 --network emqx_bridge --ip 172.18.0.2 -p 60001:1883 -p 60004:8083 -p 60007:8883 -p 60010:8084 -p 60017:18083 -p 60013:11883 emqx/emqx
#节点2
docker run -d --hostname emqx02 --name emqx02 --network emqx_bridge --ip 172.18.0.3 -p 60002:1883 -p 60005:8083 -p 60008:8883 -p 60011:8084 -p 60018:18083 -p 60014:11883 emqx/emqx
#节点3
docker run -d --hostname emqx03 --name emqx03 --network emqx_bridge --ip 172.18.0.4 -p 60003:1883 -p 60006:8083 -p 60009:8883 -p 60012:8084 -p 60019:18083 -p 60015:11883 emqx/emqx
4.修改配置
1.将每一个节点的emqx.conf文件都修改
cd /opt/emqx/etc
vi emqx.conf
大概在第10行 cluster.name = emqxcl # 集群名称
大概第33行 cluster.discovery = manual
大概第187行 node.name = [email protected] # 节点名称emqx@ip #记得ip要写节点所在的ip
另外2个节点只有node.name不一样,其他配置一样
emqx02:node.name = [email protected]
emqx03:node.name = [email protected]
这里我使用了docker虚拟网络 并给每一个容器分配了ip所以写172.18.0.2,如果是在不同服务器上的节点,请写所在服务器的ip地址
5.加入集群(一定要先完成上面的配置)
分别进入emqx02和emqx03 两个容器中执行
cd /opt/emqx/etc
emqx_ctl cluster join [email protected]
最后在任一容器中查看集群
./bin/emqx_ctl cluster status
结果如下,说明配置成功
![](https://s1.ax1x.com/2023/07/06/pC6MAhD.png)
也可以进去web页面查看 (ip改为自己的ip)
http://ip:60017
http://ip:60018
http://ip:60019都可以查看
我们可以访问3个容器的web管理页面,默认18083是web端口,因为容器做了映射所以要访问60017,60018,60019
![](https://s1.ax1x.com/2023/07/06/pC6MZ1H.png)
6.Nginx负载均衡
1.拉取镜像
docker pull nginx
2.启动容器
docker run --name nginx -p 80:80 -d nginx
3.本地映射配置文件
mkdir -p /data/nginx
mkdir -p /data/nginx/www
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/logs
4.复制配置文件到主机
docker cp 容器id:/etc/nginx/nginx.conf /data/nginx/
docker cp 容器id:/etc/nginx/conf.d /data/nginx/conf/
docker cp 容器id:/usr/share/nginx/html/ /data/nginx/www/
docker cp 容器id:/var/log/nginx/ /data/nginx/logs/
5.移除nginx容器
docker stop 容器id
docker rm 容器id
6.配置文件编辑
/data/nginx/conf/default.conf此处文件配置不变
/data/nginx/nginx.conf 配置文件进行修改
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream{
upstream emqxTcp {
server ip:60001 weight=1; # 其中的ip为宿主机的ip地址 60001为容器中1883端口在宿主机上的映射端口
server ip:60002 weight=1;
server ip:60003 weight=1;
}
server {
listen 1883;
proxy_pass emqxTcp;
}
}
'''
这里需要注意nginx需要安装 stream模块,不然会报错
'''
标签:容器,nginx,--,ip,Nginx,MQTT,Emqx,emqx,docker
From: https://www.cnblogs.com/chunyouqudongwuyuan/p/17532010.html