centos服务器进行EMQ X 服务的安装、集群及添加身份验证

时间:2024-05-19 22:38:27

一、简介

1.EMQ X R3.2 消息服务器简介

EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。

EMQ X 面向海量的 移动/物联网/车载 等终端接入,并实现在海量物理网设备间快速低延时的消息路由:

1.稳定承载大规模的 MQTT 客户端连接,单服务器节点支持百万连接。

2.分布式节点集群,快速低延时的消息路由,单集群支持千万规模的路由。

3.消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。

4.完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、私有 TCP/UDP 协议支持。

2.MQTT 发布订阅模式简述

MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,与 HTTP 的 请求(Request)/应答(Response) 的模式有本质的不同。

订阅者(Subscriber) 会向 消息服务器(Broker) 订阅一个 主题(Topic) 。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者。

主题(Topic)以 ‘/’ 为分隔符区分不同的层级。包含通配符 ‘+’ 或 ‘#’ 的主题又称为 主题过滤器(Topic Filters); 不含通配符的称为 主题名(Topic Names) 例如:

sensor/1/temperature

chat/room/subject

presence/user/feng

sensor/1/#

sensor/+/temperature

uber/drivers/joe/inbox

注: ‘+’ 通配一个层级,’#’ 通配多个层级(必须在末尾)。

注解

注: 发布者(Publisher) 只能向 ‘主题名’ 发布消息,订阅者(Subscriber) 则可以通过订阅 ‘主题过滤器’ 来通配多个主题名称。

 

二、emqx服务器的单点搭建

2.1. 下载emqx zip文件

运行:wget https://www.emqx.io/downloads/broker/v3.2.2/emqx-centos7-v3.2.2.zip

下载安装包到指定位置。

2.2、解压zip压缩包

运行: unzip emqx-centos7-v3.2.2.zip

2.3、启动emqx

首先cd到emqx目录

   运行:cd emqx/

   然后再运行:./bin/emqx start

   显示:emqx 3.2.2 is started successfully! 表示启动成功

停止emqx

./bin/emqx stop

2.4、查看运行状态

 运行:./bin/emqx_ctl status 命令

 

2.5、防火墙开放18083和1883端口

firewall-cmd --zone=public --add-port=18083/tcp --permanent

systemctl start firewalld

systemctl stop firewalld

firewall-cmd --list-ports

2.6、查看Dashboard控制台

EMQ X 默认加载 Dashboard 插件,启动 Web 管理控制台。用户可通过 Web 控制台,查看服务器运行状态、统计数据、连接(Connections)、会话(Sessions)、主题(Topics)、订阅(Subscriptions)、插件(Plugins)等。

控制台地址: http://127.0.0.1:18083,默认用户名: admin,密码:public

centos服务器进行EMQ X 服务的安装、集群及添加身份验证

 

 

2.7、测试客户端发布、订阅

  1. 准备两个springboot集成mqtt的项目,既可以是发布者也可以是订阅者。
  2. 修改配置的ip和端口为刚刚启动的emqx服务器的ip和端口,端口默认为1883
  3. a客户端发布topic为topic1的内容时,a和b客户端都能收到订阅,同样b客户端发布时,a和b也能收到。至此,单点的emqx服务器搭建成功。

 

 

三、emqx服务器的集群搭建

官方的压测显示,单点的EMQ X R3.0 在单机 8核/32G内存的 CentOS 云服务器,也能够测试到 130万 的客户端连接数,但单点没有容错能力,如果部署emq的服务器挂了后续服务将会受到影响,所以现在搭建集群。

3.1、按上述方法在2台机上安装emqx服务器

修改文件./emqx/etc/emqx.conf

主要修改以下几个地方:

第一台:

#集群发现模式,静态发现,启动后不用输加入集群命令

cluster.discovery = static 

#集群列表,配合上面static发现策略使用

cluster.static.seeds = [email protected]137.59,[email protected]137.4

#节点名

node.name = [email protected]37.57

 

#集群通信端口段

node.dist_listen_min = 6369

node.dist_listen_max = 7369

 

第二台:

#集群发现模式,静态发现,启动后不用输加入集群命令

cluster.discovery = static 

#集群列表,配合上面static发现策略使用

cluster.static.seeds = [email protected]137.59,[email protected]137.4

#节点名

node.name = emqx2@192.168.137.4

#集群通信端口段

node.dist_listen_min = 6369

node.dist_listen_max = 7369

 

3.2、防火墙把4369,6369端口也开启

3.3、把2台机器的emqx服务器分别启动

启动成功后查看任意一台Dashboard控制台,可以看到两个节点及它们的连接数。

centos服务器进行EMQ X 服务的安装、集群及添加身份验证

 

四、添加权限验证

4.1.分别在两个服务器的etc下面找到emqx.conf文件

##关闭匿名认证

allow_anonymous = false

4.2、加载用户名认证插件

./bin/emqx_ctl plugins load emqx_auth_username

4.3、添加用户

./bin/emqx_ctl users add admin jingxin123

其中,admin是账户名,jingxin123是密码

4.4、分别重启两个emqx服务器

 

五、mqtt集成到springboot并测试

  1. 集成mqtt到两个springboot项目,配置文件添加连接emqx的ip及端口
  2. 其中一个发布信息,另一个能收到订阅,反之亦然。
  3. 关掉其中一个emqx服务器,发布及订阅信息仍能成功。
  4. 开启这台emqx服务器,关掉另一个,发布及订阅还是成功。至此,安装,集群及集成到springboot项目完成

注:mqtt集成到springboot进行消息的发布及订阅请参考《springboot整合mqtt进行消息的发布及订阅》