Erlang/OTP 语言平台的分布式程序,由分布互联的 Erlang 运行系统组成,每个 Erlang 运行系统被称为节点(Node),节点(Node) 间通过 TCP 互联,消息传递的方式通信:


| Node1 | --------| Node2 |


|     \     /    |
|       \ /      |
|       / \      |
|     /     \    |

| Node3 | --------| Node4 |


EMQ 节点集群使用的 TCP 端口: 4369 集群节点发现端口 6369 集群节点控制通道 防火墙根据使用的 MQTT 接入方式,开启上述端口的访问权限。 集群节点间如有防护墙,需开启上述 TCP 端口互访权限。 如果集群节点间存在防火墙,防火墙需要开启 4369 端口和一个 TCP 端口段。4369 由 epmd 端口映射服务使用,TCP 端口段用于节点间建立连接与通信。 防火墙设置后,EMQ 需要配置相同的端口段,emqttd/etc/emq.conf 文件:

Distributed node port range

node.dist_listen_min = 6369 node.dist_listen_max = 7369

EMQ集群: rpm安装:

安装依赖

yum -y install yum install lksctp-tools

安装包

yum -y install emqttd-centos7-v2.3.11-1.el7.centos.x86_64.rpm

启动

systemctl start emqttd.service 配置集群目录:vim /data/emq/emqx/etc/emqx.conf cluster.discovery = manual #日志相关配置

Crash dump log file. 故障转储日志文件

node.crash_dump = /data/emq/emq-cluster/logs/crash.dump

Sets the log dir. 主日志路径

log.dir = /data/emq/emq-cluster/logs/

The file where error logs will be writed to. 错误日志

log.error.file = /data/emq/emq-cluster/logs/error.log

The file for crash log. 故障日志的文件

log.crash.file = /data/emq/emq-cluster/logs/crash.log

启动emq:./bin/emqx start emqx 3.0.1 is started successfully!

配置集群:vim /etc/emqttd/emq.conf cluster.name = emqcl cluster.discovery = manual node.name = emq2@192.168.170.131 node.proto_dist = inet_tcp node.dist_listen_min = 6369 node.dist_listen_max = 7369 listener.tcp.internal = 0.0.0.0:11883 内部mqtt/tcp协议侦听器的IP地址和端口

开启防火墙访问权限

firewall-cmd --zone=public --add-port={1883/tcp,8080/tcp,18083/tcp,4369/tcp,8883/tcp.8083/tcp,8084/tcp,6370/tcp} --permanent firewall-cmd --reload

重启EMQ服务

systemctl start emqttd.service [root@gougou ~]# netstat -tnlp

集群操作命令:

节点加入集群

emqttd_ctl cluster join emq1@192.168.170.130

查看集群的状态

emqttd_ctl cluster help [root@gougou ~]# emqttd_ctl cluster status Cluster status: [{running_nodes,['emq1@192.168.170.130', 'emq3@192.168.170.132', 'emq2@192.168.170.131']}]

节点退出集群

主动退出:emqttd_ctl cluster leave Leave the cluster successfully. Cluster status: [{running_nodes,['emq2@192.168.170.131']}] 从集群中删除: emqttd_ctl cluster force-leave emq3@192.168.170.132 Remove the node from cluster successfully. Cluster status: [{running_nodes,['emq2@192.168.170.131', 'emq1@192.168.170.130']}]