Linux怎么部署EMQX分布式企业级物联网MQTT消息中间件

胖辰吖_5109

胖辰吖_5109

2026-10-05

477人浏览

原创

emqx linux分布式部署的核心是节点发现、元数据共享、统一认证与消息路由;需确保erlang cookie一致、防火墙开放4369及6369-7369端口、时间同步,并验证cluster status、跨节点客户端列表和跨节点mqtt收发。

linux怎么部署emqx分布式企业级物联网mqtt消息中间件

直接上结论:EMQX 在 Linux 上做分布式部署,核心不是“装多个实例”,而是让节点能互相发现、共享元数据、统一认证和路由消息。单节点跑起来容易,但一上分布式,cluster.discovery 配置错一个参数、防火墙漏开一个端口、或 Erlang cookie 不一致,整个集群就卡在 joining 状态不动——这不是 bug,是 Erlang 分布式机制的刚性要求。

怎么确认 EMQX 节点间真正组成了集群

别只看 sudo emqx_ctl cluster status 输出里有没有其他节点名。真实情况是:节点可能“列在列表里”,但实际无法同步会话、无法跨节点投递 QoS 1 消息、Dashboard 显示不同步的连接数。必须验证三件事:

  • 执行 sudo emqx_ctl cluster status,所有节点状态必须是 Running(不是 Joining 或 Down)
  • 在任意节点执行 sudo emqx_ctl clients list,结果应包含全部节点上的客户端连接(不是只显示本机的)
  • 用 MQTT 客户端订阅 test/topic,从另一台机器发布消息,确保能实时收到——且发布和订阅不在同一节点上(可用 sudo emqx_ctl listeners show 查每个节点监听的 IP)

emqx.conf 里最关键的三个分布式配置项

EMQX 5.x 默认使用 static 发现方式,但生产环境强烈建议改用 etcd 或 k8s。如果硬要用 static,这三个配置必须逐字核对:

  • cluster.discovery = static:必须显式设置,不能依赖默认值
  • cluster.static.seeds = emqx@192.168.1.10,emqx@192.168.1.11:注意是 emqx@IP 格式,不是域名;IP 必须是节点间可直连的内网地址;所有节点的 seeds 列表要完全一致
  • node.name = emqx@192.168.1.10:每个节点必须唯一,且与 seeds 中的条目严格匹配;不能写成 emqx@localhost 或 emqx@hostname(除非 /etc/hosts 已精确映射)

改完配置后,必须重启节点:sudo systemctl restart emqx,不能只 reload。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载

为什么集群启动后总卡在 Joining 状态

这是最常踩的坑,原因几乎都出在底层通信层:

  • Erlang cookie 不一致:所有节点的 /var/lib/emqx/.erlang.cookie 文件内容必须**完全相同**(包括空格和换行),且权限为 400,属主是 emqx 用户
  • 防火墙阻断了 Erlang 分布式端口:EMQX 默认用 4369(epmd 端口) + 动态端口范围(默认 6369-7369)。云服务器安全组和本地 ufw/firewalld 都得放行这两个范围
  • 节点时间不同步:Erlang 集群对时钟漂移敏感,误差超过 1 秒可能导致握手失败。务必在所有节点运行 sudo timedatectl set-ntp true 并验证 timedatectl status 显示 “System clock synchronized: yes”

分布式下认证和 ACL 必须集中管理

单节点时把用户写进 etc/plugins/emqx_auth_username.conf 就能用,但分布式下这么做会导致各节点认证不一致——A 节点加了用户,B 节点查不到。正确做法只有两种:

  • 用内置数据库:启用 emqx_auth_mnesia 插件,所有节点共享同一份内存数据库(适合中小规模,节点数 ≤ 5)
  • 对接外部系统:生产环境必须用 emqx_auth_http 或 emqx_auth_jwt,把认证逻辑交给你的业务后端或 Keycloak 等统一身份服务

ACL 规则同理,不要分散写在各节点配置里。ACL 文件路径(如 etc/acl.conf)在集群中会被所有节点读取,但修改后需手动触发重载:sudo emqx_ctl acl reload,否则新规则不生效。

真正难的不是启动集群,而是让所有节点对“当前谁在线、谁订阅了什么、消息该往哪转”达成一致。这个一致性靠的是 Erlang 的底层分布协议,它不给你容错余地——cookie 错一位、时间差半秒、端口少开一个,集群就静默失败。部署前先用两台干净虚拟机跑通最小闭环,比在生产环境反复重启强得多。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

数据库优化 linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1933

5

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.07

2754

5

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

2024.05.11

589

5

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

2025.12.18

604

18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

2026.03.31

418

17

物联网有哪些应用
物联网有哪些应用

物联网应用有智能家居、智慧城市、工业自动化、农业智能化、物流和供应链管理、医疗健康、智能交通、能源管理、环境监测、智能零售等等。详细介绍:1、智能家居,物联网技术可以将家庭中的各种设备和家居系统连接到互联网,实现智能化的家居控制和管理,例如,通过智能手机可以远程控制家中的照明、温度、安防系统等;2、智慧城市,物联网技术可以应用于城市基础设施和公共服务,实现智慧城市的建设等等。

2023.09.05

579

5

物联网中的m2m概念
物联网中的m2m概念

M2M是人与机器连接的手段与方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.03.12

3097

7

物联网应用岗位
物联网应用岗位

常见岗位包括:物联网架构师;物联网工程师;数据分析师;云计算工程师;应用程序开发人员;嵌入式系统工程师;网络安全分析师;产品经理;物联网项目经理;业务分析师等等。想了解更多物联网应用的相关内容,可以阅读本专题下面的文章。

2024.05.21

1595

8

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3830

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习