手动(manual) 方式管理集群介绍(看完收藏·点赞)
两台服务器 s1.emqx.io, s2.emqx.io 上部署 EMQ X 集群:
节点名 主机名 (FQDN) IP 地址
emqx@s1.emqx.io 或 emqx@192.168.78.131 s1.emqx.io 192.168.78.131
emqx@s2.emqx.io 或 emqx@192.168.0.130 s2.emqx.io 192.168.78.130
配置 emqx@s1.emqx.io 节点
emqx/etc/emqx.conf:
node.name = emqx@s1.emqx.io
# 或
node.name = emqx@192.168.78.131
注意: 节点启动加入集群后,节点名称不能变更。
配置 emqx@s2.emqx.io 节点
emqx/etc/emqx.conf:
node.name = emqx@s2.emqx.io
# 或
node.name = emqx@192.168.78.130
注意: 节点启动加入集群后,节点名称不能变更。
节点加入集群
启动两台节点后,在 s2.emqx.io 上执行:
$ ./bin/emqx_ctl cluster join emqx@192.168.78.131
执行命令后,加入集群failed
Failed to join the cluster: {node_down,'192.168.78.131@192.168.78.130'}
加入失败原因是没有开放4370端口
开放4370端口:(所有节点开发4370端口)
firewall-cmd --zone=public --add-port=4370/tcp --permanent
重新启动防火墙:
firewall-cmd --reload
然后重新执行:
$ ./bin/emqx_ctl cluster join emqx@192.168.78.131
Join the cluster successfully.
Cluster status: #{running_nodes =>
['emqx@192.168.78.130','emqx@192.168.78.131'],
或者在 s1.emqx.io 上执行:
$ ./bin/emqx_ctl cluster join emqx@192.168.78.130
Join the cluster successfully.
Cluster status: #{running_nodes =>
['emqx@192.168.78.130','emqx@192.168.78.130'],
在任意节点上查询集群状态:
./bin/emqx_ctl cluster status
{running_nodes =>
['emqx@192.168.78.130','emqx@192.168.78.131'],
stopped_nodes => []}
测试两个节点之间是否能正常通信
ws://192.168.78.130:8083/mqtt
ws://192.168.78.131:8083/mqtt
mqtt://192.168.78.130:1883
同时订阅一个主题例如all 然后选择一端发送消息,检查另一端是否能接收到消息
测试结果两个节点(s1.emqx.io和s2.emqx.io)之间无法互相通信
解决导致无法消息互通问题:
1. 在各节点emqx/etc/emqx.conf:
将 rpc.port_discovery = stateless改为
rpc.port_discovery = manual(手动命令创建集群)
2.开放5369端口,重启防火墙
firewall-cmd --zone=public --add-port=5369/tcp --permanent
firewall-cmd --reload
然后再重新启动emqx,再重新进行消息互通测试,消息能够成功互通,最终手动搭建emqx集群完成。
emqx restart
接下来可通过nginx配置负载均衡策略,进而合理分配连接
详细配置:nginx负载均衡配置分配连接