Skip to content

EMQX集群安装

使用docker,具体参考官方文档

拉取

bash
// 拉取
sudo docker pull emqx/emqx:5.6.0

// 查看所有镜像
docker images

image-20250508132858571

集群搭建

清理环境

bash
sudo docker stop emqx1 emqx2 nginx-lb 2>/dev/null || true
sudo docker rm emqx1 emqx2 nginx-lb 2>/dev/null || true
sudo docker network rm emqx-net 2>/dev/null || true

创建docker网络

这个网络允许 emqx1, emqx2, 和 nginx-lb 容器通过它们的容器名称相互发现和通信。

bash
sudo docker network create emqx-net

节点1

  • 容器名称:emqx1

  • 所在网络: emqx-net

  • network-alias注意与节点名称@后面的内容一致,否则找不到

  • 节点名称:[email protected]:node1代表第一个节点,emqx表示它的服务类型,broker或者local`等表示是内部网络

  • 集群发现方式:static,静态自动

  • 集群中的所有预期节点:[email protected],[email protected]

  • 代理模式:开启(可获取请求的真实IP和端口)

  • 镜像 emqx/emqx:5.6.0

  • Cookie:集群内设置相同的秘钥

bash
sudo docker run -d \
    --name emqx1 \
   	--network emqx-net \
    --network-alias node1.emqx.broker \
    -p 18888:1883 \
    -p 18083:18083 \
 	-e EMQX_NODE_NAME="[email protected]" \
    -e EMQX_CLUSTER__DISCOVERY_STRATEGY="static" \
    -e "EMQX_CLUSTER__STATIC__SEEDS=[[email protected],[email protected]]" \
    -e EMQX_NODE__COOKIE="zwh_emqx_key" \
    -e EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL=true \
    emqx/emqx:5.6.0

节点2

  • Cookie:集群内设置相同的秘钥
  • "这里我配置1883的即可"
bash
sudo docker run -d \
    --name emqx2 \
   	--network emqx-net \
    --network-alias node2.emqx.broker \
    -p 18889:1883 \
 	-e EMQX_NODE_NAME="[email protected]" \
    -e EMQX_CLUSTER__DISCOVERY_STRATEGY="static" \
    -e "EMQX_CLUSTER__STATIC__SEEDS=[[email protected],[email protected]]" \
    -e EMQX_NODE__COOKIE="zwh_emqx_key" \
    -e EMQX_LISTENERS__TCP__DEFAULT__PROXY_PROTOCOL=true \
    emqx/emqx:5.6.0

查看

bash
// 查看所有的容器,包括失败的
docker ps -a

访问

image-20250508144245894

集群管理

查看

通过命令行 (在 Docker 容器内执行):emqx ctl cluster status

bash
sudo docker exec emqx1 emqx ctl cluster status

image-20250508150155286

通过面板查看

image-20250508144245894

退出集群

进入容器执行,emqx ctl cluster leave

bash
sudo docker exec emqx2 emqx ctl cluster leave

image-20250508150435685

加入集群

  1. 启动docker容器时配置EMQX_CLUSTER__STATIC__SEEDS
  2. 恢复原来的集群:重启