如何组建 EMQ X 集群
假设我们有两台服务器: s1.emqx.io(192.168.3.235) 和 s2.emqx.io(192.168.3.234),
分别安装了EMQ X,现在要让这两台服务器组成集群。
一.配置节点名称
需要在emqx/etc/emqx.conf文件中设置正确的节点名
在192.168.3.235中配置
node.name = emqx@192.168.3.235
在192.168.3.234中配置
node.name = emqx@192.168.3.234
二.设置集群 cookie
EMQ X 使用cookie来确认同一个集群中的节点。同一个集群中的节点必须使用相同的cookie。
修改cookie请编辑配置文件 emqx/etc/emqx.conf,找到以下行并做相应修改。
node.cookie = emqxsecretcookie
三、手动集群管理
使用随 EMQ X 安装附带的命令行工具 emqx_ctl 的 cluster 命令可以方便的管理集群,
完成在集群中添加、移除节点和查询集群状态等任务。
设置集群方式(manual) 手动集群方式是 EMQ X 的默认集群方式。请在配置文件emqx/etc/emqx.conf中找到以下行并做相应修改:
cluster.discovery = manual
-manual:手动加入命令
-static:静态节点列表
-mcast:IP组播
-dns:DNS自动集群
-etcd:etcd自动集群
-k8s:Kubernetes
1)加入新节点
在任意独立节点上执行 cluster join 后,该节点会被加入到集群中。在本节的例子中,可以在234节点上执行:
emqx_ctl cluster join emqx@192.168.3.235
在节点被成功的加入到集群后,系统会返回以下提示:
Join the cluster successfully.
Cluster status: [{running_nodes,['emq@s1.emqx.io','emq@s2.emqx.io']}]
2)从集群中移除节点
leave: 需要移除的节点主动退出集群。在该节点上执行以下命令即可退出集群:
$ ./bin/emqx_ctl cluster leave
remove: 从集群的其他节点移除一个节点。在集群的其他节点上执行以下命令即可移除该节点。本例在 s1 节点上执行以下命令把 s2 节点移除出集群:
$ ./bin/emqx_ctl cluster remove emq@s2.emqx.io
3)查询集群状态
$ emqx_ctl cluster status
Cluster status: [{running_nodes,['emq@s1.emqx.io','emq@s2.emqx.io']}]
四.静态集群
节点配置
静态集群的配置相对简单,只需要在每个节点的 etc/emqx.conf 文件中配置集群方式和节点列表即可:
cluster.discovery = static
cluster.static.seeds = emqx1@192.168.3.235,emqx2@192.168.3.234
五.使用 ETCD 的自动集群
1).安装ETCD
ETCD_VER=v3.3.20
# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /usr/local/src/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
2).nohup 命令启动etcd
nohup ./etcd --initial-advertise-peer-urls http://127.0.0.1:2380
--listen-peer-urls http://0.0.0.0:2380
--advertise-client-urls http://0.0.0.0:2379
--listen-client-urls http://0.0.0.0:2379
--initial-cluster node1=http://127.0.0.1:2380 &
3).配置 EMQ X 节点
您需要在各个 EMQ X 节点上编辑 'etc/emqx.conf’文件中的cluster段落和node段落。
cluster.discovery = etcd
cluster.etcd.server = http://192.168.1.162:2379
cluster.etcd.prefix = emqxcl
cluster.etcd.node_ttl = 1m
依次启动节点
emqx_ctl cluster status
Cluster status: [{running_nodes,['emqx1@192.168.1.162',
'emqx2@192.168.1.176']}]