Emqx集群配置

一、EMQX介绍

EMQX是企业级物联网 MQTT 消息平台,支持百万级物联网设备一站式接入、MQTT&CoAP 多协议处理、低时延实时消息通信。支持基于 SQL 的内置规则引擎,灵活处理/转发消息到后端服务,存储消息数据到各种数据库,或桥接 Kafka、RabbitMQ 等企业中间件,适用于各种物联网应用场景,助力企业快速构建物联网应用,并支持公有云、私有云、物理机、容器/K8S 任意部署。

官网:https://www.emqx.io/cn/

二、EMQX安装

2.1 下载安装
yum -y install unzip lrzsz
wget https://www.emqx.io/downloads/broker/v4.2.3/emqx-centos7-4.2.3-x86_64.zip
unzip emqx-centos7-4.2.3-x86_64.zip
mv emqx /usr/local/emqx_node1
2.2 启动服务
cd /usr/local/emqx_node1/bin/
./emqx start  #启动服务
./emqx stop   #停止服务
./emqx_ctl status #查看状态
2.3 端口说明

EMQ X 默认开启的 MQTT 服务 TCP 端口 :

端口 说明
1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8084 MQTT/WebSocket/SSL 端口
8081 管理 API 端口
18083 Dashboard 端口

防火墙根据使用的 MQTT 接入方式,开启上述端口的访问权限。

三、EMQX多实例

3.1 配置说明

在同一台服务器安装两个EMQX Broker时,需要调整的第2个broker的监听端口。

3.2 多实例

实例一配置如下 :

vim emqx.conf
#修改如下配置:
node.name = emqx01@10.0.0.10
node.cookie = emqxsecretcookie

listener.tcp.internal = 127.0.0.1:11883
listener.ssl.external = 8883
listener.ws.external = 8083
listener.tcp.external = 0.0.0.0:1883
listener.wss.external = 8084
vim plugins/emqx_dashboard.conf
#
dashboard.listener.http = 18083

实例二配置如下 :

vim emqx.conf
#修改如下配置:
node.name = emqx02@10.0.0.10
node.cookie = emqxsecretcookie

listener.tcp.internal = 127.0.0.1:11893
listener.ssl.external = 8893
listener.ws.external = 8093
listener.tcp.external = 0.0.0.0:1893
listener.wss.external = 8094
vim etc/plugins/emqx_dashboard.conf
#
dashboard.listener.http = 18093

配置完成后启动服务即可。

四、EMQX集群

4.1 集群说明

EMQX支持多种策略自动发现节点创建集群:

策略 说明
manual 手工命令创建集群
static 静态节点列表自动集群
mcast UDP 组播方式自动集群
dns DNS A 记录自动集群
etcd 通过 etcd 自动集群
k8s Kubernetes 服务自动集群
4.2 节点信息
节点ip 集群名
10.0.0.10 emqx@10.0.0.10
10.0.0.24 emqx@10.0.0.24
4.3 创建集群

EMQX使用cookie来确认同一个集群中的节点。同一个集群中的节点必须使用相同的cookie,在emqx.conf中定义;

vim emqx.conf

#10.0.0.10
cluster.name = emqx #集群名
node.name = emqx@10.0.0.10 #节点名称,这里的emqx要和集群名称保持一致
node.cookie = emqxsecretcookie #确保集群中的cookie一致
cluster.discovery = manual #集群模式为手动创建

#10.0.0.24
cluster.name = emqx #集群名
node.name = emqx@10.0.0.24 #节点名称,这里的emqx要和集群名称保持一致
node.cookie = emqxsecretcookie #确保集群中的cookie一致
cluster.discovery = manual #集群模式为手动创建
#加入集群,如下命令任选一条执行即可
./bin/emqx_ctl cluster join emqx@10.0.0.24   #在10节点执行
./bin/emqx_ctl cluster join emqx@10.0.0.10   #在24节点执行

##查看集群状态
[root@emqx01 bin]# ./emqx_ctl cluster status
Cluster status: #{running_nodes => ['emqx@10.0.0.10','emqx@10.0.0.24'],
                  stopped_nodes => []}

也可以在web控制台查看集群状态,浏览器访问: http://ip:18083/ 默认用户名: admin / public ;

4.4 退出集群
./bin/emqx_ctl cluster leave #在需要离开集群的节点执行
./bin/emqx_ctl cluster force-leave emqx@10.0.0.10 #在任意节点操作强制指定某个节点退出集群
4.5 集群列表

使用static策略创建,修改配置文件如下 :

vim etc/emqx.conf
#
cluster.discovery = static
cluster.static.seeds = emqx01@10.0.0.10,emqx02@10.0.0.10
./bin/emqx start
./bin/emqx_ctl cluster status
4.6 端口说明

EMQ X 节点集群使用的 TCP 端口 :

端口 说明
4369 集群节点发现端口 (EPMD)
4370 集群节点发现端口
5369 集群节点 PRC 通道
6369 集群节点控制通道

集群节点间如有防护墙,需开启上述 TCP 端口互访权限。

4.7 集群架构

如下图,这种部署模式下EMQX单集群可轻松支持100万设备接入 :