系统运维

MQTT服务器EMQX介绍与安装教程

浅时光博客 · 8月18日 · 2024年 · 845 次已读

一、产品概览

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 消息支持
    • 持久会话和离线消息支原文链接:https://www.dqzboy.com
    • 保留消息(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 分布的基本功能是转发和发布消息到订阅者,如下图所示。

2、集群规划

节点名称(主机名)节点IP节点用途
emqx-lb192.168.66.100mqx集群负载,统一入口;LB使用NginxE
emqx-cluster01192.168.66.21Emqx集群节点
emqx-cluster02192.168.66.22Emqx集群节点

3、安装部署

3.1:下载解压

#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

3.3:启动服务

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

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

3.4:加文章来源(Source):https://www.dqzboy.com入集群

  • 集群节点2,执行下面的命令加入到emqx集群
[root@emqx-cluster02 ~]# emqx_ctl cluster join [email protected]
[root@emqx-cluster02 ~]# emqx_ctl cluster  status

3.5:访问面板

  • 输入节点IP加18083端口进行访问
    • User:admin
    • Passwd:public
  • 修改默认admin用户密码
  • 检查集群状态

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


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/12968.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

1 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. 王子与青蛙2024-8-25 · 23:55

    感谢分享,学习了