一、产品概览


EMQX 是一款大规模可弹性伸缩的云原生分布式物联网(IoT) 消息传递系统,专为大规模物联网应用而设计。

作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助您快速构建关键业务的物联网平台与应用。

1、产品优势


- 开放源码:基于 Apache 2.0 许可证完全开源,自 2013 年起 200+ 开源版本迭代。
- MQTT 5.0:100% 支持 MQTT 5.0 和 3.x 协议标准,更好的伸缩性、安全性和可靠性。
- 海量连接:单节点支持 500 万 MQTT 设备连接,集群可扩展至 1 亿并发 MQTT 连接。
- 高性能:单节点支持每秒实时接收、移动、处理与分发数百万条的 MQTT 消息。
- 低时延:基于 Erlang/OTP 软实时的运行时系统设计,消息分发与投递时延低于 1 毫秒。
- 高可用:采用 Masterless 的大规模分布式集群架构,实现系统高可用和水平扩展。

2、功能概览


2.1:连接

- 完整支持 MQTT v3.1、v3.1.1 和 v5.0 协议规范

QoS 0、QoS 1、QoS 2 消息支持
- 持久会话和离线消息支持
- 保留消息(Retained Message)支持
- 遗嘱消息(Will Message)支持
- 共享订阅支持
- $SYS/ 系统主题支持

MQTT 支持 4 种传输协议

- TCP
- TLS
- WebSocket
- QUIC(实验性)

HTTP 消息发布接口

网关

- CoAP
- LwM2M
- MQTT-SN
- Stomp
- GB/T 32960(企业版)
- JT/T 808(企业版)

更多 MQTT 扩展支持:

- 延迟发布
- 代理订阅
- 主题重写

2.2:安全

- 基于用户名/密码的身份认证,支持使用内置数据库、Redis、MySQL、PostgreSQL、MongoDB 作为数据源,也支持使用 HTTP Server 提供认证服务
- 基于 JWT 的身份认证与权限控制,支持 JWKs
- MQTT 5.0 增强认证
- PSK 身份验证
- 基于 Client ID、IP 地址,用户名的访问控制,支持使用内置数据库、Redis、MySQL、PostgreSQL、MongoDB 作为数据源,也支持使用 HTTP Server 提供授权服务
- 客户端黑名单支持

2.3:可伸缩性

- 多节点集群 (Cluster)
- 支持手动、mcast、dns、etcd、k8s 集群发现方式集群
- 多服务器节点桥接 (Bridge)

2.4:数据集成

- SQL 语法数据集成,实时提取、过滤、丰富和转换 MQTT 消息或内部事件为用户所需格式,并将其发送到外部数据平台
- 通过 MQTT 与其他 Broker 或物联网平台进行双向数据桥接(如 EMQX Cloud,AWS IoT Core,Azure IoT Hub)
- 通过 Webhook 与其他应用集成

2.5:可靠性

- 过载保护
- 消息速率限制
- 连接速率限制

2.5:可观测性

- 客户端在线状态查询
- 集群状态与指标查询
- Prometheus/StatsD 集成
- 自动网络分区恢复
- 在线日志追踪(Log Trace)
- Erlang 运行时追踪工具

2.5:可扩展性

- 插件
- 钩子
- gRPC 钩子扩展
- gRPC 协议扩展

二、集群部署


1、集群介绍


- EMQX 由 Erlang/OTP 驱动,是高度可扩展的分布式平台。

1.1:Erlang/OTP

Erlang/OTP 最初是一个由爱立信为电信设备开发而设计的编程语言平台。

电信设备(路由器、接入网关)通常是一个分布式的系统,通过背板连接主控制板和多个业务板。

1.2:分布式Erlang

Erlang/OTP 平台的分布式程序是由分布,互联的 Erlang 运行时系统组成。 每个 Erlang 运行时系统被称为一个节点。 节点通过 TCP 相互连接,形成一个网络(或在此背景下的一个集群)。

Erlang 节点由一个唯一的节点名称来识别,该名称由两部分组成 用 @ 分隔。

1.3:EMQX 分布式集群设计

- EMQX 分布的基本功能是转发和发布消息到订阅者,如下图所示。

emqx01

2、集群规划


| 节点名称(主机名) | 节点IP | 节点用途 |
|---|---|---|
| emqx-lb | 192.168.66.100 | mqx集群负载,统一入口;LB使用NginxE |
| emqx-cluster01 | 192.168.66.21 | Emqx集群节点 |
| emqx-cluster02 | 192.168.66.22 | Emqx集群节点 |

3、安装部署


3.1:下载解压

- 下载地址:https://www.emqx.io/zh/downloads

emqx02

#emqx集群所有节点执行
mkdir -p /opt/soft
cd /opt/soft/
wget https://www.emqx.com/zh/downloads/broker/5.0.8/emqx-5.0.8-el7-amd64.rpm

#安装部署
yum install emqx-5.0.8-el7-amd64.rpm


3.2:修改配置

- 一个节点名由两部分组成,节点部分和主机部分,用@分隔
- 注意:配置里节点名格式为 Name@Host,Host 必须是 IP 地址或 FQDN (主机名。域名)

[root@emqx-cluster01 soft]# vim /etc/emqx/emqx.conf


emqx03

3.3:启动服务

#RPM包安装的服务会自动生成systemd服务配置,直接通过systemd服务管理启动
systemctl start emqx.service 
systemctl status emqx.service

#加入开机自启
systemctl enable emqx.service


3.4:加入集群

- 集群节点2,执行下面的命令加入到emqx集群

[root@emqx-cluster02 ~]# emqx_ctl cluster join emqx-cluster01@192.168.66.21


emqx04

[root@emqx-cluster02 ~]# emqx_ctl cluster  status


emqx05

3.5:访问面板

- 输入节点IP加18083端口进行访问

User:admin
- Passwd:public

修改默认admin用户密码

emqx06

- 检查集群状态

emqx07

> 如果本文对您有所帮助,请点赞并留言支持,这将是对我们最大的鼓励和肯定!感谢您的阅读。