news 2026/4/25 4:44:19

从零到一:手把手搭建高可用EMQX MQTT服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零到一:手把手搭建高可用EMQX MQTT服务器

1. EMQX简介与核心概念

MQTT协议作为物联网领域的"普通话",已经成为设备互联的事实标准。而EMQX则是目前最流行的开源MQTT消息中间件之一,就像物联网世界的"交通枢纽"。我最早接触EMQX是在2018年一个智能家居项目中,当时为了处理数万设备的并发连接,尝试了多种方案后最终选择了它。

EMQX的核心优势在于其分布式架构百万级连接处理能力。最新版本(5.x)相比早期版本在性能上有质的飞跃——在我的压力测试中,单节点轻松支撑10万+的MQTT连接。对于开发者而言,它提供了开箱即用的管理控制台,让消息流转和设备管理变得可视化。

这里有个生活化的类比:想象EMQX就像快递公司的分拣中心。设备(客户端)把包裹(消息)送到分拣中心(EMQX服务器),由服务器根据地址(Topic主题)准确投递给收件人(订阅者)。而MQTT协议就是快递员之间的暗号,保证包裹高效无误地传递。

2. 环境准备与安装

2.1 硬件与系统要求

在实际部署中,资源配置需要根据业务规模灵活调整。对于开发测试环境,我通常这样配置:

  • 云服务器:2核4G配置(阿里云ECS t6系列就够用)
  • 操作系统:Ubuntu 20.04 LTS(长期支持版更稳定)
  • 磁盘空间:至少50GB(消息持久化需要额外空间)

注意:生产环境建议使用物理机或高性能云主机,避免虚拟化带来的性能损耗

2.2 安装方式对比

EMQX提供多种安装方式,这里我推荐两种最常用的:

  1. 二进制包安装(适合快速体验)
wget https://www.emqx.com/zh/downloads/broker/5.0.20/emqx-5.0.20-ubuntu20.04-amd64.tar.gz tar -zxvf emqx-5.0.20-ubuntu20.04-amd64.tar.gz cd emqx/bin ./emqx start
  1. Docker安装(适合容器化部署)
docker run -d --name emqx \ -p 1883:1883 -p 8083:8083 \ -p 8084:8084 -p 8883:8883 \ -p 18083:18083 \ emqx/emqx:5.0.20

我在AWS上实测发现,Docker方式会损失约15%的性能,但部署灵活性更高。如果追求极致性能,建议直接使用二进制安装。

3. 基础配置与安全加固

3.1 必须做的安全设置

第一次启动后,立即访问http://服务器IP:18083会看到登录界面。使用默认账号admin/public登录后,第一件事就是修改密码!我见过太多因为没改密码导致的安全事故。

通过CLI修改密码的方法(适合批量部署):

./emqx_ctl admins passwd admin 你的新密码

3.2 网络端口配置

EMQX默认开放的端口需要特别注意:

  • 1883:MQTT协议标准端口
  • 8883:MQTT over SSL
  • 8083:WebSocket连接
  • 8084:WSS(WebSocket Secure)

生产环境中,我强烈建议:

  1. 关闭不必要的端口(如8083)
  2. 为8883端口配置有效的SSL证书
  3. 使用防火墙限制访问源IP

配置SSL的示例(需要提前准备证书):

listeners.ssl.default { bind = "0.0.0.0:8883" max_connections = 102400 ssl_options { keyfile = "/etc/emqx/certs/key.pem" certfile = "/etc/emqx/certs/cert.pem" cacertfile = "/etc/emqx/certs/cacert.pem" } }

4. 高可用集群搭建

4.1 集群架构设计

EMQX集群采用去中心化架构,各节点平等。在我的生产实践中,通常采用3节点或5节点部署。下图展示了一个典型的三节点部署方案:

[客户端] | [负载均衡器] | [EMQX Node1] ↔ [EMQX Node2] ↔ [EMQX Node3] | | | [Redis集群] [MySQL集群] [监控系统]

4.2 具体搭建步骤

假设有三台服务器:192.168.1.10、192.168.1.11、192.168.1.12

  1. 首先确保各节点时间同步(NTP服务)
  2. 修改每台服务器的/etc/hosts文件,添加主机名解析
  3. 在第一台节点执行:
./emqx start ./emqx_ctl cluster join emqx@192.168.1.11
  1. 验证集群状态:
./emqx_ctl cluster status

踩坑提醒:我曾遇到集群节点无法发现的问题,后来发现是防火墙没放行4370端口。建议提前检查端口连通性。

5. 性能调优实战

5.1 关键参数调整

在/etc/emqx/emqx.conf中,这几个参数直接影响性能:

# 最大连接数(根据内存调整) zone.external.max_connections = 1000000 # 消息吞吐量优化 listener.tcp.external.rate_limit = 1000,10000 # 会话超时设置 zone.external.session_expiry_interval = 2h

5.2 监控与告警

EMQX内置了Prometheus监控接口,地址为http://IP:18083/api/v5/prometheus/stats。我通常配合Grafana使用这个看板配置:

dashboard { ## Prometheus Dashboard URL prometheus = "http://localhost:3000/d/emqx/emqx-prometheus-dashboard?orgId=1" ## AlertManager URL alertmanager = "http://localhost:9093" }

常见性能瓶颈排查经验:

  1. 连接数上不去 → 检查ulimit和TCP参数
  2. 消息延迟高 → 检查网络带宽和磁盘IO
  3. CPU跑满 → 检查是否有异常主题订阅

6. 客户端开发实践

6.1 Python连接示例

使用paho-mqtt库的完整示例:

import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("test/topic") def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("your_server_ip", 1883, 60) client.loop_forever()

6.2 生产环境注意事项

  1. 必须实现断线重连:物联网设备网络环境复杂
  2. 合理设置QoS级别
    • QoS0:可能丢失(适合传感器数据)
    • QoS1:至少一次(适合控制指令)
    • QoS2:精确一次(适合支付场景)
  3. 客户端ID规范:建议使用"设备类型+MAC地址"的格式

7. 常见问题解决方案

问题1:Dashboard无法访问

  • 检查防火墙规则
  • 确认EMQX是否正常运行(./emqx_ctl status)
  • 查看日志(/var/log/emqx/emqx.log.1)

问题2:客户端连接频繁断开

# 调整keepalive参数 listener.tcp.external.keepalive = 3600s

问题3:高并发下消息丢失

# 优化消息队列设置 zone.external.max_mqueue_len = 10000 zone.external.mqueue_priorities = "none"

记得第一次上线时遇到消息堆积问题,后来发现是默认队列长度太小。调整后稳定运行至今。EMQX的灵活性就在于这些参数都可以根据业务特点精细调整。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 4:41:41

深度学习基础:从神经元到神经网络实战

1. 深度学习入门:从神经元到智能决策第一次接触深度学习时,我被那些复杂的数学公式和术语吓得不轻。直到有一天,我把神经网络想象成幼儿园小朋友分糖果的过程——每个孩子(神经元)根据自己收到的糖果数量(输…

作者头像 李华
网站建设 2026/4/25 4:40:18

深入SAP应收票据:从贴现、背书到托收,如何用或有负债科目(2211)管理商业承兑汇票风险?

SAP应收票据全流程管理:从或有负债配置到商业承兑汇票风控实战 引言:商业承兑汇票的风险管理挑战 在供应链金融高速发展的今天,商业承兑汇票已成为企业间结算的重要工具。相比银行承兑汇票,商业承兑汇票完全依赖开票企业的信用背书…

作者头像 李华
网站建设 2026/4/25 4:35:22

AutoDock Vina终极指南:从零开始掌握分子对接技术

AutoDock Vina终极指南:从零开始掌握分子对接技术 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina AutoDock Vina是一款开源的分子对接软件,广泛应用于药物发现和蛋白质-配体相互作用研…

作者头像 李华