Dokcer版EMQX 4 集群上部署及负载均衡
假如有两台服务器,192.168.2.127,192.168.2.128
docker版EMQX安装
docker run --name emqx --restart=always --network host -e EMQX_LISTENER__TCP__EXTERNAL=1883 -e EMQX_NAME=emqx -e EMQX_HOST=192.168.2.127 -e EMQX_MANAGEMENT__LISTENER__HTTP=18080 -e EMQX_CLUSTER__NAME=ys_emqxcl -e EMQX_CLUSTER__DISCOVERY=manual -e EMQX_NODE__DIST_LISTEN_MIN=6369 -e EMQX_NODE__DIST_LISTEN_MAX=7369 -e EMQX_NODE__COOKIE=emqxsecretcookie -v /root/emq/conf/acl.conf:/opt/emqx/etc/acl.conf -v /root/emq/conf/emqx_auth_mysql.conf:/opt/emqx/etc/plugins/emqx_auth_mysql.conf -d emqx/emqx:v4.1.0
`
其中 EMQX_HOST填宿主机的ip地址
-v是添加docker和宿主机之间文件映射,你也可以直接映射 /root/docker/emq/conf整个文件目录,这里用主机网络 --network host,因为是不同宿主机直接的集群.
在192.168.2.128服务器也按照这个安装,记得修改EMQX_HOST.
安装完后,手动加入集群
当两台emqx的docker容器都安装好后,执行docker exec -it emqx sh命令进入容器中,进入/opt/emqx/bin目录,执行
emqx_ctl cluster status
看emqx是否启动成功
Node 'emqx@192.168.2.127' is started
emqx 4.1.0 is running
这样就说明成功了
之后加入集群
emqx_ctl cluster join emqx@192.168.2.128
nignx负载均衡
进入nginx配置文件,增加tcp的负载配置
stream {
upstream mqttCluster {
server 192.168.2.127:1883 weight=1;
server 192.168.2.128:1883 weight=5;
}
server {
listen 1883;
proxy_pass mqttCluster;
proxy_connect_timeout 30;
proxy_timeout 60;
}
}
weight=1是权重配置,谁几率收到请求比较大
共享订阅 !!最终要的,配置订阅topic,如果这个不配置,那么每当有一次消息,所有集群节点都会收到
#topic是主题,比如/sys/111/
在订阅主题的时候,主题要加前缀,"$share/group/" + topic,#share是代表共享订阅,group代表主题的分组
分组意义:比如你有5台服务器,做了集群,其中有两个分组group1,group2,
当2台的主题是group1,3台是group2,那么当group1的主题来的时候,
只有group1的两台服务会收到
其实还有一种方式,上面的是手动加集群的,还有就是在emqx.conf中配置集群节点列表,但是我个人实操下来一直不成功,报Node ‘emqx@10.12.15.209’ not responding to pings.这个异常,emqx启动不起来,用的也是-- network host启动的,网上看别人说是容器ip和主机ip不一致的问题,了解的大佬能给点建议