机器:
10.60.0.20
10.60.0.21
10.60.0.22
一、三台机子都配置域名(/etc/hosts)
bash
10.60.0.20 node1.emqx.io
10.60.0.22 node3.emqx.io
10.60.0.21 node2.emqx.io
二、docker-compose.yml(10.60.0.21)
其他两台机子自己替换EMQX_NODE_NAME(节点名)
bash
version: '3.9'
services:
emqx1:
image: emqx:5.6.1
container_name: emqx1
environment:
- "TZ=Asia/Shanghai"
- "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
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
# extra_hosts:
# 允许容器可以使用的host访问其余节点
# - node2.emqx.io:10.60.0.21
# - node3.emqx.io:10.60.0.22
volumes:
- ./logs:/opt/emqx/log
- ./data:/opt/emqx/data
privileged: true
network_mode: host
restart: "on-failure: 10"
logging:
driver: json-file
options:
max-size: 10m
max-file: 3
三、启动
第一次启动应该会失败,因为data目录我是直接启动时自动创建的,查看容器日志会提示/opt/emqx/data/configs的权限不够。
解决办法:修改data及其子目录权限为777,再重新执行docker-compose up -d 启动容器。
另一种办法就是先创建data,赋权限777,在执行docker-compose up -d 启动容器
四、启动成功后查看emqx是否加入集群(10.60.0.20),我21和22分别叫emqx2,emqx3
bash
docker exec -it emqx1 sh -c "emqx_ctl cluster status"
正确的结果(如果三个容器都启动了,可以看见三个节点都加入了。如果只启动了一个节点,集群里running状态的也只有当前节点,另外两个节点就在stop,以下是三个都启动成功)
如果执行以上命令是提示ping不通,像下面那样,那就是你的hosts没配对(Node 'emqx@node1.emqx.io' not responding to pings.)
原因是什么?就是你要为@符号之后的域名配解析ip,所以才有第一步的操作
五、控制台展示