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 = [email protected]
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 [email protected]
查看集群的状态
emqttd_ctl cluster help
[root@gougou ~]# emqttd_ctl cluster status
Cluster status: [{running_nodes,['[email protected]',br/>'[email protected]',
'[email protected]']}]
节点退出集群
主动退出:emqttd_ctl cluster leave
Leave the cluster successfully.
Cluster status: [{running_nodes,['[email protected]']}]
从集群中删除: emqttd_ctl cluster force-leave [email protected]
Remove the node from cluster successfully.
Cluster status: [{running_nodes,['[email protected]',
'[email protected]']}]