Docker EMQX伪集群,加入集群失败

环境信息

  • EMQX 版本:5.0.0
  • 操作系统及版本:Ubuntu 20.04
  • 其他

问题描述

因业务需要,在尝试搭建EMQX集群方案
当前资源不够,所以是在Ubuntu中使用Docker手动创建3个emqx容器,尝试组成伪集群
3容器分别为:
emqx1,emqx2,emqx3
分别对应192.168.0.11/12/13
3个emqx容器挂载于同一个网桥下,彼此容器间通信正常
端口均区分,不冲突,Dashboard均可用
其他:
防火墙已关闭

但容器组成集群失败

配置文件及日志


容器间通信正常


容器

加入集群失败
image

为什么在你emqx2上ping emqx1时的IP是 0.10
但是你join 时看到的emqx1的IP是0.11 :face_with_monocle:

join 命令要用节点的全名称?
例如 emqx_ctl cluster join emqx1@192.168.0.10

image
应该是需要使用全名称

目前怀疑的地方是3个容器的4370,8001,5369节点应该冲突了,因为伪集群,且没有指定

因为你没发全部的docker配置,也看不出来,我给我祖传的docker compose 给你对比下,里面还加了ha。
只要改一下emqx具体的版本就能用。

docker-compose -f docker-compose-emqx-cluster.yaml up
docker-compose -f docker-compose-emqx-cluster.yaml down

docker.zip (16.0 KB)

1 个赞

感谢,我试下,我这边没有用yaml,单独创建的容器,参数如下:

第一台
docker run -d \
--hostname emqx1 \
--name emqx1 \
--network emqx_bridge \
--ip 192.168.0.10 \
		-p 60001:1883 \
		-p 60004:8083 \
		-p 60010:8883 \
		-p 60007:8084 \
		-p 60016:18083 \
		-p 60013:11883 \
		-v /etc/localtime:/etc/localtime:ro emqx/emqx:latest

第二台
docker run -d \
--hostname emqx2 \
--name emqx2 \
--network emqx_bridge \
--ip 192.168.0.11 \
		-p 60002:1883 \
		-p 60005:8083 \
		-p 60011:8883 \
		-p 60008:8084 \
		-p 60017:18083 \
		-p 60014:11883 \
		-v /etc/localtime:/etc/localtime:ro emqx/emqx:latest

第三台
类似,端口递增

还尝试过

第一台
-p 4370:4370

第二台
-p 4371:4371

实际加入集群时仍然报错

三台端口递增的方式是正确的,只不过运行起来的emqx的节点名可能冲突。
分别修改下emqx/etc/emqx.conf里的

node.name =emqx@192.168.0.10
node.name =emqx@192.168.0.11

试试

你好,很荣幸看到你祖传的配置哈,这个对docker compose 不是很熟,有些配置好像很复杂,能否帮忙解读下各项配置和要修改的地方,学习借鉴下,有相关文章介绍吗 :joy:

大佬,你这个是专门针对单节点伪集群的,有哪种“两个节点,每个节点多个emqx容器”的例子吗?