cluster 命令

cluster 命令可以管理由多个 EMQ X 节点(进程)组成的集群:

命令描述
cluster join <Node>加入集群
cluster leave离开集群
cluster force-leave <Node>从集群删除节点
cluster status查询集群状态

示例:

为更好地展示 cluster 命令,我们先在本机启动两个节点并组成集群,为避免端口冲突,我们对 emqx2 节点的监听端口做出了调整,例如 MQTT/TCP 监听端口由默认的 1883 改为了 2883,详情请参见 配置说明配置项

启动 emqx1 :

  1. $ cd emqx1 && ./bin/emqx start

启动 emqx2 :

  1. $ cd emqx2 && ./bin/emqx start

使用 cluster join <Node> 将两个节点组成集群:

  1. $ cd emqx2 && ./bin/emqx_ctl cluster join emqx1@127.0.0.1
  2. Join the cluster successfully.
  3. Cluster status: [{running_nodes,['emqx1@127.0.0.1','emqx2@127.0.0.1']}]

任意节点目录下查询集群状态:

  1. $ ./bin/emqx_ctl cluster status
  2. Cluster status: [{running_nodes,['emqx2@127.0.0.1','emqx1@127.0.0.1']}]

集群消息路由测试: MQTT 命令行工具使用由 EMQ X 团队开发的 emqtt 客户端。

  1. # emqx1 节点(1883 端口)订阅主题 x
  2. $ ./bin/emqtt sub -t x -q 1 -p 1883
  3. Client emqtt-a7de8fffbe2fbeb2fadb sent CONNECT
  4. Client emqtt-a7de8fffbe2fbeb2fadb subscribed to x
  5. # 向 emqx2 节点(2883 端口 )发布消息
  6. $ ./bin/emqtt pub -t x -q 1 -p 2883 --payload hello
  7. Client emqtt-0898fa447676e17479a5 sent CONNECT
  8. Client emqtt-0898fa447676e17479a5 sent PUBLISH (Q1, R0, D0, Topic=x, Payload=...(5 bytes))
  9. Client emqtt-0898fa447676e17479a5 sent DISCONNECT
  10. # emqx1 节点(1883 端口)收到消息
  11. $ ./bin/emqtt sub -t x -q 1 -p 1883
  12. hello

emqx2 节点离开集群:

  1. $ cd emqx2 && ./bin/emqx_ctl cluster leave

强制 emqx2 节点离开集群,需要在集群下的目标节点以外的节点上进行操作:

  1. $ cd emqx1 && ./bin/emqx_ctl cluster force-leave emqx2@127.0.0.1

注意,EMQ X 不支持一个已经在一个集群中的节点加入另外一个集群,因为这会导致两个集群数据不一致,但支持加入过集群的节点在离开该集群后加入另一个集群。