Dokcer版EMQX 4 集群上部署及负载均衡

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不一致的问题,了解的大佬能给点建议

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值