fred
1
两台公网云服务器docker配置分别为:
emqx:
image: emqx:5.4.1
container_name: emqx
environment:
EMQX_NODE_NAME: emqx@sg1.emqx.xxx.top
EMQX_CLUSTER__DISCOVERY_STRATEGY: static
EMQX_NODE__COOKIE: aaa
EMQX_CLUSTER__STATIC__SEEDS: sg1.emqx.xxx.top,cn1.emqx.xxx.top
volumes:
- ./images/app/emqx/data:/opt/emqx/data
- ./images/logs/emqx:/opt/emqx/log
networks:
kdznnet:
aliases:
- sg1.emqx.xxx.top
- emqx
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
emqx:
image: emqx:5.4.1
container_name: emqx
environment:
EMQX_NODE_NAME: emqx@cn1.emqx.xxx.top
EMQX_NODE__COOKIE: aaa
EMQX_CLUSTER__DISCOVERY_STRATEGY: static
EMQX_CLUSTER__STATIC__SEEDS: sg1.emqx.xxx.top,cn1.emqx.xxx.top
networks:
kdznnet:
aliases:
- cn1.emqx.xxx.top
- emqx
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
通过:
docker exec -it emqx sh -c "emqx_ctl cluster status"
Cluster status: #{running_nodes => ['emqx@cn1.emqx.kdzn.top'],
stopped_nodes => []}
logs
EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds]: sg1.emqx.xxx.top,cn1.emqx.xxx.top
EMQX_CLUSTER__DISCOVERY_STRATEGY [cluster.discovery_strategy]: static
EMQX_NODE__COOKIE [node.cookie]: ******
EMQX_NODE__NAME [node.name]: emqx@cn1.emqx.xxx.top
Listener ssl:default on 0.0.0.0:8883 started.
Listener tcp:default on 0.0.0.0:1883 started.
Listener ws:default on 0.0.0.0:8083 started.
Listener wss:default on 0.0.0.0:8084 started.
Listener http:dashboard on :18083 started.
EMQX 5.4.1 is running now!
fred
2
改成dns a 记录的方式也是没效果
emqx:
image: emqx:5.4.1
container_name: emqx
environment:
EMQX_NODE_NAME: emqx@sg1.emqx.xxx.top
EMQX_NODE__COOKIE: aaa
EMQX_CLUSTER__DISCOVERY_STRATEGY: dns
EMQX_CLUSTER__DNS__NAME: emqx.xxx.top
EMQX_CLUSTER__DNS__RECORD_TYPE: a
volumes:
- ./images/app/emqx/data:/opt/emqx/data
- ./images/logs/emqx:/opt/emqx/log
networks:
kdznnet:
aliases:
- sg1.emqx.xxx.top
- emqx
ports:
- 1883:1883
- 6883:6883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
emqx:
image: emqx:5.4.1
container_name: emqx
environment:
EMQX_NODE_NAME: emqx@cn1.emqx.xxx.top
EMQX_NODE__COOKIE: aaa
EMQX_CLUSTER__DISCOVERY_STRATEGY: dns
EMQX_CLUSTER__DNS__NAME: emqx.xxx.top
EMQX_CLUSTER__DNS__RECORD_TYPE: a
networks:
kdznnet:
aliases:
- cn1.emqx.xxx.top
- emqx
ports:
- 1883:1883
- 6883:6883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
fred
4
我的两个节点是分开在不同的公网云服务器上,共用一个名称和端口也是不行的是吧?
fred
5
另外两个node_name后面是有差异的,一个是sg1,一个是cn1
分开在不同的公网云服务器上可以导出相同端口,使用相同名称
是不是两台云主机上的 docker network 网络不互通?
seeds 是不是应该用 node name [emqx@cn1.emqx.xxx.top]:
docker run -d \
--name emqx2 \
-e "EMQX_NODE_NAME=emqx@node2.emqx.com" \
-e "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" \
-e "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.com,emqx@node2.emqx.com]" \
--network emqx-bridge \
--network-alias node2.emqx.com \
emqx/emqx:5.4.1
fred
9
我刚打开了debug日志,有这个错误:
2024-01-24T18:11:26.201474+08:00 [debug] Ekka(AutoCluster): join result: ignore mfa: undefined
2024-01-24T18:11:26.201569+08:00 [info] Ekka(AutoCluster): discovered nodes are not responding: [‘emqx@1.222.222.22’,‘emqx@101.32.170.22’] mfa: undefined
需要确保那些端口是正常的? 云服务器防火墙现在是全端口开放的,docker映射的端口列表是:
- 1883:1883
- 6883:6883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
两个 EMQX 节点之间集群,网络应该走 docker network
expose 端口只是为了外部客户端访问 host
在这两台机器上还有其他的 emqx 节点在运行么?
两台机器上分别执行下看看呢?
docker container ls -a
fred
11
应该不是seeds 配置参数问题,看日志已经识别到两台服务器了,docker 的enviroment 参数 没加引号,数组好像是用 , 方式隔开表示数组的
fred
12
节点1:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f493bf8980be emqx:5.4.1 "/usr/bin/docker-ent…" 2 hours ago Up 2 hours 4370/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 0.0.0.0:6883->6883/tcp, :::6883->6883/tcp, 0.0.0.0:8083-8084->8083-8084/tcp, :::8083-8084->8083-8084/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 0.0.0.0:18083->18083/tcp, :::18083->18083/tcp, 5369/tcp emqx
节点2:
578d007f782c emqx:5.4.1 "/usr/bin/docker-ent…" 2 hours ago Up 2 hours 4370/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 0.0.0.0:6883->6883/tcp, :::6883->6883/tcp, 0.0.0.0:8083-8084->8083-8084/tcp, :::8083-8084->8083-8084/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 0.0.0.0:18083->18083/tcp, :::18083->18083/tcp, 5369/tcp
但是你seeds 没有EMQX_NAME 啊, 你先按照官方node_name 去配置seeds 集群先别犟
了解。
是不是两台云主机上的 docker network 网络不互通?
现在是需要让两个 docker 容器跨主机通信进行集群。所以需要检查 overlay 网络是不是正常工作的。
fred
16
不好意思,前面我理解错了您说的问题点,确实seeds里面的node_name那里我写的是有问题的
fred
18
还没有的,等成功了,我回复您哈,
还在检测两台服务器网络互通情况
fred
19
@seqwait @JimMoen 谢谢两位大佬的帮助,问题解决了,
static方式集群失败的原因是我seeds 里面的node_name 写错了
dns方式集群失败的原因是EMQX_NODE_NAME 方式不对,从emqx@sg1.emqx.xx.top这种名称@域名的风格改为:emqx@1.1.1.1,名称@ip地址就成功了
我也遇到一样的问题了
version: ‘3’
services:
emqx1:
image: emqx/emqx:5.5.0
environment:
- “EMQX_NODE_NAME=emqx02@外网ip”
- “EMQX_CLUSTER__DISCOVERY_STRATEGY=static”
- “EMQX_CLUSTER__STATIC__SEEDS=[emqx01@外网ip,emqx02@外网ip]”
ports:
- 1883:1883
- 8031:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
healthcheck:
test: [“CMD”, “/opt/emqx/bin/emqx_ctl”, “status”]
interval: 5s
timeout: 25s
retries: 5