emqx5.8.6集群失败

docker compose文件为
services:
emqx1:
image: emqx:5.8.6
container_name: emqx1
network_mode: “host”
environment:
- EMQX_NODE_NAME=emqx1@172.26.234.141
- EMQX_CLUSTER__DISCOVERY_STRATEGY=static
- EMQX_CLUSTER__STATIC__SEEDS=[emqx1@172.26.234.141,emqx2@172.26.234.142,emqx3@172.26.234.143]
- EMQX_LOG_TO=both
- EMQX_LOG_LEVEL=debug
- EMQX_LOG_FILE=/opt/emqx/log/emqx.log
- EMQX_LOG_ROTATION_SIZE=100MB
- EMQX_LOG_ROTATION_COUNT=5
# - EMQX_DISTRIBUTION__PORT=4371
# - EMQX_RPC__TCP_SERVER_PORT=5371
- EMQX_NODE_COOKIE=1772255f0a5917a4471f8c98deaf2603e3de2d7d8e3cb68b5bfdad803f88c582
- EMQX_LISTENERS__SSL__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WSS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__TCP__EXTERNAL__BIND=0.0.0.0:1884
- EMQX_LISTENERS__TCP__EXTERNAL__PROXY_PROTOCOL=true
- EMQX_LISTENERS__WS__DEFAULT__BIND=0.0.0.0:8088
- EMQX_DASHBOARD__LISTENERS__HTTP__BIND=0.0.0.0:18083
- EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE=false
- EMQX_DASHBOARD__DEFAULT_USERNAME=admin
- EMQX_DASHBOARD__DEFAULT_PASSWORD=Isuke.2025
volumes:
- /opt/modules/emqx1_data:/opt/emqx/data
- /opt/modules/emqx1_data/etc:/opt/emqx/etc
- /data/logs/emqx1_log:/opt/emqx/log
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: ‘1’
memory: 2G
logging:
driver: json-file
options:
max-size: “10m”
max-file: “3”
日志:
2025-04-30T15:45:14.524912+08:00 [info] Ekka(AutoCluster): discovered nodes are not responding: [‘emqx1@172.26.234.141’,‘emqx2@172.26.234.142’,‘emqx3@172.26.234.143’]
2025-04-30T15:45:20.703023+08:00 [error] ** Cannot get connection id for node emqx2@server142
2025-04-30T15:45:27.704753+08:00 [debug] Ekka(AutoCluster): join result: ignore

手动加入集群:
root@server141:/opt/modules/emqx1_data# docker exec -it emqx1 emqx_ctl cluster force-join emqx2@172.26.234.142
Node ‘emqx1@172.26.234.141’ not responding to pings.

用的是阿里云esc, 安全组放行了4369/7369端口

单台esc上创建两台伪集群,没啥问题,可以集群,网络驱动使用bridge。跨主机overly、host都有试过,最终没有集群成功,求大佬指点

抱歉,docker 跨机器用 host 模式组集群没有经验。可以自己摸索一下。

只看这个报错的话,你在 141 上join 142,结果是这个命令行连 141 都找不到。推断应该是 docker 里面的网络没设置好。

好的,之前用docker swarm跨机器集群的,网络模式用的overly,也是没有成功,后面用ai排查,让我改成host模式,可能问题还是出在主机网络通信这块,我再研究下,切换成overly模式

如果你只的目的只是想跨机器 docker集群成功的话,
我推荐你使用 hostname 的方式(不要和 IP 绑定)

上面这个是单机的最佳实践配置方式,集群的话,你可以参照着来,主要就是设置好 hostname (不使用固定的 IP)
到了多台机时,我估计也得把宿主机的 hostname 设置好。

嗯,开始使用的是hostname配置,一直不通就改成了ip,结果还是没成功
帮忙看下是不是我的docker compose文件存在问题,用docker swarm
services:
emqx1:
image: emqx:5.8.6
environment:
- EMQX_NODE_NAME=emqx@node1.emqx.cluster # 节点唯一标识
- EMQX_CLUSTER__DISCOVERY_STRATEGY=static # 静态节点发现策略
- EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.cluster,emqx@node2.emqx.cluster,emqx@node3.emqx.cluster]
- EMQX_LISTENERS__TCP__EXTERNAL__BIND=0.0.0.0:1884
- EMQX_LISTENERS__TCP__EXTERNAL__PROXY_PROTOCOL=true
- EMQX_LOG__CONSOLE_HANDLER__ENABLE=true
- EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug
- EMQX_LOG_LEVEL=debug # 日志级别(原EMQX_LOG__LEVEL)
- EMQX_LOG_FILE=/opt/emqx/log/emqx.log # 文件路径(原EMQX_LOG__FILE)
- EMQX_LOG_ROTATION_SIZE=100MB # 单文件最大100MB(原EMQX_LOG__ROTATION__SIZE)
- EMQX_LOG_ROTATION_COUNT=5 # 保留5个历史文件(原EMQX_LOG__ROTATION__COUNT)
- EMQX_DISTRIBUTION__PORT=4371
- EMQX_RPC__TCP_SERVER_PORT=5371
- EMQX_NODE_COOKIE=1772255f0a5917a4471f8c98deaf2603e3de2d7d8e3cb68b5bfdad803f88c582
# 关闭非必要监听器
- EMQX_LISTENERS__SSL__DEFAULT__ENABLE=false
# - EMQX_LISTENERS__WS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WSS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WS__DEFAULT__BIND=0.0.0.0:8083
- EMQX_DASHBOARD__LISTENERS__HTTP__BIND=0.0.0.0:18083
- EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE=false # 关闭HTTPS
- EMQX_DASHBOARD__DEFAULT_USERNAME=admin
- EMQX_DASHBOARD__DEFAULT_PASSWORD=Isuke.2025
volumes:
- /opt/modules/emqx1_data:/opt/emqx/data
- /opt/modules/emqx1_data/etc:/opt/emqx/etc
- /data/logs/emqx1_log:/opt/emqx/log
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /etc/hosts:/etc/hosts:ro
networks:
emqx-net:
aliases:
- node1.emqx.cluster
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: ‘1’
memory: 2G
placement:
constraints:
- node.hostname == node1.emqx.cluster
logging:
driver: json-file
options:
max-size: “10m”
max-file: “3”
emqx2:
image: emqx:5.8.6
environment:
- EMQX_NODE_NAME=emqx@node2.emqx.cluster
- EMQX_CLUSTER__DISCOVERY_STRATEGY=static
- EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.cluster,emqx@node2.emqx.cluster,emqx@node3.emqx.cluster]
- EMQX_LISTENERS__TCP__EXTERNAL__BIND=0.0.0.0:1885
- EMQX_LISTENERS__TCP__EXTERNAL__PROXY_PROTOCOL=true
- EMQX_LOG__CONSOLE_HANDLER__ENABLE=true
- EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug
- EMQX_LOG_LEVEL=debug # 日志级别(原EMQX_LOG__LEVEL)
- EMQX_LOG_FILE=/opt/emqx/log/emqx.log # 文件路径(原EMQX_LOG__FILE)
- EMQX_LOG_ROTATION_SIZE=100MB # 单文件最大100MB(原EMQX_LOG__ROTATION__SIZE)
- EMQX_LOG_ROTATION_COUNT=5 # 保留5个历史文件(原EMQX_LOG__ROTATION__COUNT)
- EMQX_DISTRIBUTION__PORT=4372
- EMQX_RPC__TCP_SERVER_PORT=5372
- EMQX_NODE_COOKIE=1772255f0a5917a4471f8c98deaf2603e3de2d7d8e3cb68b5bfdad803f88c582
# 关闭非必要监听器
- EMQX_LISTENERS__SSL__DEFAULT__ENABLE=false
# - EMQX_LISTENERS__WS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WSS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WS__DEFAULT__BIND=0.0.0.0:8083
- EMQX_DASHBOARD__LISTENERS__HTTP__BIND=0.0.0.0:18083
- EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE=false # 关闭HTTPS
- EMQX_DASHBOARD__DEFAULT_USERNAME=admin
- EMQX_DASHBOARD__DEFAULT_PASSWORD=Isuke.2025
volumes:
- /opt/modules/emqx2_data:/opt/emqx/data
- /opt/modules/emqx2_data/etc:/opt/emqx/etc
- /data/logs/emqx2_log:/opt/emqx/log
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /etc/hosts:/etc/hosts:ro
networks:
emqx-net:
aliases:
- node2.emqx.cluster
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: ‘1’
memory: 2G
placement:
constraints:
- node.hostname == node2.emqx.cluster
logging:
driver: json-file
options:
max-size: “10m”
max-file: “3”
emqx3:
image: emqx:5.8.6
environment:
- EMQX_NODE_NAME=emqx3@node3.emqx.cluster
- EMQX_CLUSTER__DISCOVERY_STRATEGY=static
- EMQX_CLUSTER__STATIC__SEEDS=[emqx1@node1.emqx.cluster,emqx2@node2.emqx.cluster,emqx3@node3.emqx.cluster]
- EMQX_LISTENERS__TCP__EXTERNAL__BIND=0.0.0.0:1886
- EMQX_LISTENERS__TCP__EXTERNAL__PROXY_PROTOCOL=true
- EMQX_LOG__CONSOLE_HANDLER__ENABLE=true
- EMQX_LOG__CONSOLE_HANDLER__LEVEL=debug
- EMQX_LOG_LEVEL=debug # 日志级别(原EMQX_LOG__LEVEL)
- EMQX_LOG_FILE=/opt/emqx/log/emqx.log # 文件路径(原EMQX_LOG__FILE)
- EMQX_LOG_ROTATION_SIZE=100MB # 单文件最大100MB(原EMQX_LOG__ROTATION__SIZE)
- EMQX_LOG_ROTATION_COUNT=5 # 保留5个历史文件(原EMQX_LOG__ROTATION__COUNT)
- EMQX_DISTRIBUTION__PORT=4373
- EMQX_RPC__TCP_SERVER_PORT=5373
- EMQX_NODE_COOKIE=1772255f0a5917a4471f8c98deaf2603e3de2d7d8e3cb68b5bfdad803f88c582
# 关闭非必要监听器
- EMQX_LISTENERS__SSL__DEFAULT__ENABLE=false
# - EMQX_LISTENERS__WS__DEFAULT__ENABLE=false
- EMQX_LISTENERS__WSS__DEFAULT__ENABLE=false
- EMQX_DASHBOARD__LISTENERS__HTTP__BIND=0.0.0.0:18083
- EMQX_LISTENERS__WS__DEFAULT__BIND=0.0.0.0:8083
- EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE=false # 关闭HTTPS
- EMQX_DASHBOARD__DEFAULT_USERNAME=admin
- EMQX_DASHBOARD__DEFAULT_PASSWORD=Isuke.2025
volumes:
- /opt/modules/emqx3_data:/opt/emqx/data
- /opt/modules/emqx3_data/etc:/opt/emqx/etc
- /data/logs/emqx3_log:/opt/emqx/log
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /etc/hosts:/etc/hosts:ro
networks:
emqx-net:
aliases:
- node3.emqx.cluster
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: ‘1’
memory: 2G
placement:
constraints:
- node.hostname == node3.emqx.cluster
logging:
driver: json-file
options:
max-size: “10m”
max-file: “3”

haproxy:
image: haproxy:2.8
ulimits:
nofile:
soft: 1024000
hard: 1024000
volumes:
- /opt/modules/haproxy2.8/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
- /opt/modules/haproxy2.8/certs:/usr/local/etc/haproxy/certs
- /opt/modules/haproxy2.8/conf.d:/usr/local/etc/haproxy/conf.d
- /data/logs/haproxy2.8_log:/var/log
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /etc/hosts:/etc/hosts:ro
ports:
- “2888:1883”
- “8888:8883”
- “28088:18083”
- “8404:8404”
- “28083:8083”
# extra_hosts:
# - “server141:node1.emqx.cluster”
# - “server142:node2.emqx.cluster”
# - “server143:node3.emqx.cluster”
networks:
- emqx-net
deploy:
placement:
constraints:
- node.role == manager
restart_policy:
condition: any # Add this
resources:
limits:
cpus: ‘1.0’
memory: 1G
networks:
emqx-net:
driver: overlay
attachable: true
ipam:
driver: default
config:
- subnet: 172.26.234.0/24