EMQX社区版5.8.5集群搭建踩坑记

article/2025/7/21 2:08:08

一、首先要在三台物理机上分别搭建EMQX的实例

正常的安装是很简单的,并且有多种方式,我选取的是tar.gz安装包。
只需要把安装包解压tar -zxvf emqx-5.8.5xxx.tar.gz,然后进入到bin目录下,执行./emqx start即可。

1. 需要考虑操作系统版本,找到合适的安装包

https://www.emqx.com/zh/downloads/broker/v5.8.5
要考虑操作系统、版本、架构是否匹配。
比如我在openEuler 22.03 (LTS-SP4)上使用emqx-5.8.5-el8-amd64.tar.gz安装成功,但在CentOS Linux 7 (Core)上却安装不成功,后边换成了emqx-5.8.5-el7-amd64.tar.gz才可以。

2. 需要安装好相关依赖

比如我在openEuler 22.03 (LTS-SP4)上安装了以下依赖:

yum install -y make gcc g++ ncurses-devel openssl-devel git fcgi fcgi-devel unixODBC unixODBC-develrpm -ivh libatomic-4.8.5-44.el7.x86_64.rpm

在CentOS Linux 7 (Core)上安装时老报错:
ERROR: Required dependencies: openssl-1.1.1 (libcrypto), libncurses and libatomic1
于是安装了以下依赖:

yum install -y libatomicyum install -y epel-releaseyum install -y gcc gcc-c++ make cmake protobuf-compiler openssl-devel erlang erlang-nox

二、然后修改配置,将3个实例组织成一个集群

参考官网:https://docs.emqx.com/zh/emqx/v5.8/deploy/cluster/create-cluster.html
我这边采用的是基于 static 节点列表自动集群,只需要区分一下各个节点的名称node.name即可。

以下是我对三个实例的配置:

node {name = "emqx@192.168.0.1"cookie = "emqxsecretcookie"data_dir = "data"
}cluster {name = emqxcldiscovery_strategy = staticstatic {seeds = ["emqx@192.168.0.1","emqx@192.168.0.2","emqx@192.168.0.3"]}
}
node {name = "emqx@192.168.0.2"cookie = "emqxsecretcookie"data_dir = "data"
}cluster {name = emqxcldiscovery_strategy = staticstatic {seeds = ["emqx@192.168.0.1","emqx@192.168.0.2","emqx@192.168.0.3"]}
}
node {name = "emqx@192.168.0.3"cookie = "emqxsecretcookie"data_dir = "data"
}cluster {name = emqxcldiscovery_strategy = staticstatic {seeds = ["emqx@192.168.0.1","emqx@192.168.0.2","emqx@192.168.0.3"]}
}

cookie可以设置得复杂点,更安全。但需要确保集群内的这几个节点的cookie是一致的。

除此之外,需要确保节点间的网络连接正常。
5370:集群 RPC 端口,适用于物理机环境

可以使用iptables命令


## 查看当前iptables规则‌
sudo iptables -L -n## 添加规则允许5370端口
sudo iptables -A INPUT -p tcp --dport 5370 -j ACCEPT## 保存iptables规则, 执行iptables-save也行
sudo service iptables save

也可以确保1883、8883、18083这些端口也开放。
将三个节点以此启动,你就可以在三个控制面板上看到相同的集群节点列表了:
在这里插入图片描述
或者在任一节点上执行命令,查看集群状态:

./emqx ctl cluster status

Cluster status: #{running_nodes =>
[‘emqx@192.168.0.1’,‘emqx@192.168.0.2’,
‘emqx@192.168.0.3’],
stopped_nodes => []}

三、nginx的安装、配置和部署

参考官网:https://docs.emqx.com/zh/emqx/v5.8/deploy/cluster/lb-nginx.html

使用 NGINX 负载均衡 EMQX 集群具备以下几个功能和优势:
1.作为反向代理服务器,NGINX 位于 MQTT 服务器端,代表 MQTT 客户端向 EMQX 集群发起 MQTT 连接请求,并代替 EMQX 集群处理请求,然后将 EMQX 集群的响应返回给 MQTT 客户端。这样的设置可以将多个集群隐藏起来,暴露一个接入点给 MQTT 客户端。MQTT 客户端只需要与 NGINX 通信,而不需要知道后面的集群数量和布局,这种方式可以提高系统的可维护性和可扩展性。
2.NGINX 可用于终结 MQTT 客户端与 EMQX 集群之间经 SSL 加密的 MQTT 连接,减轻 EMQX 集群的加密解密负担。从而提供多种优势,如提高性能、简化证书管理和增强安全性。
3.NGINX 具有灵活的负载均衡策略,以使用不同的策略来决定请求应该发送到集群中的哪个 EMQX 节点,有助于分摊流量和请求,提高性能和可靠性。例如粘性负载平衡,可将请求路由到同一后端服务器,从而提高性能和会话持久性。

本来安装过nginx做过静态资源服务器和http的反向代理,想着照搬过来就行,但看了官网才知道,还需要附带一些模块才能支持tcp反向代理

–with-http_ssl_module 参数用于添加 SSL 功能支持,
–with-stream 与 --with-stream_ssl_module 参数用于添加 TCP 反向代理支持。

于是,就干脆照着官网上的建议重新安装了nginx

wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0/./configure  --with-threads  --with-http_stub_status_module   --with-http_ssl_module   --with-http_realip_module   --with-stream   --with-stream_ssl_modulemake
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
cd sbin./nginx -t./nginx -s reload

特别需要注意的一点是,要设置代理协议为true
在这里插入图片描述


stream {upstream mqtt_servers {# down:表示当前的 server 暂时不参与负载# max_fails:允许请求失败的次数;默认为 1# fail_timeout:失败超时时间,默认 10s, max_fails 达到次数后暂停的请求时间# backup:其它所有的非backup机器down或者忙的时候,请求backup机器server 192.168.0.1:1883;server 192.168.0.2:1883;server 192.168.0.3:1883;}server {listen 10884;proxy_pass mqtt_servers;# 启用此项时,对应后端监听器也需要启用 proxy_protocolproxy_protocol on;proxy_connect_timeout 10s;   # 默认心跳时间为 10 分钟proxy_timeout 1800s;proxy_buffer_size 3M;tcp_nodelay on;       }upstream mqtts_servers {server 192.168.0.1:1883;server 192.168.0.2:1883;server 192.168.0.3:1883;}server {listen 20884 ssl;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_certificate /usr/local/NGINX/certs/server.crt;ssl_certificate_key /usr/local/NGINX/certs/server.key;ssl_verify_depth 2;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;# 添加 CA 证书及开启验证客户端证书参数即可启用双向认证# ssl_client_certificate /usr/local/NGINX/certs/ca.pem;# ssl_verify_client on;# ssl_verify_depth 1;proxy_pass mqtts_servers;# 启用此项时,对应后端监听器也需要启用 proxy_protocolproxy_protocol on;proxy_connect_timeout 10s;   # 默认心跳时间为 10 分钟proxy_timeout 1800s;proxy_buffer_size 3M;tcp_nodelay on;}
}

四、集群的自测验证

  1. 采用nginx暴露出去的emqx集群地址,是否能平替之前的单节点地址?
    答: 可以。多个client都用这个集群地址去连接,它们之间是可以正常进行消息的收发的,而不论它们是否连到了集群的同一个节点上。

  2. 可以监听系统消息吗?
    答:可以。需要在控制台 【访问控制】 --> 【客户端授权】ACL File找中添加一行配置,然后对应用服务重启,以便可以重新订阅上系统主题。

{allow, {username, "zhangsan"}, subscribe, ["$SYS/#"]}.
  1. 集群相对于单点来说,高可用上有体现吗?
    答:有。手动stop其中一个节点时,连接会自动转移到其他节点上,不影响业务。

http://www.hkcw.cn/article/UkCCOdfJPx.shtml

相关文章

长短期记忆(LSTM)网络模型

一、概述 长短期记忆(Long Short-Term Memory,LSTM)网络是一种特殊的循环神经网络(RNN),专门设计用于解决传统 RNN 在处理长序列数据时面临的梯度消失 / 爆炸问题,能够有效捕捉长距离依赖关系。…

t014-项目申报管理系统 【springBoot 含源码】

项目演示视频 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,项目信息因为其管理内容繁杂,管理数量繁多导致手工进行…

软件评测机构如何保障质量?检测资质、技术实力缺一不可

软件评测机构在保障软件质量上起着关键作用,对软件行业的健康发展极为关键。它们采用专业的技术手段和严格的评估流程,对软件的运行效果、功能等多方面进行细致的审查,为开发者和使用者提供了客观、公正的参考依据。 检测资质正规软件评测机…

安卓逆向篇JEB 反编译断点动态调试加密算法还原逻辑会员绕过

#APK 逆向 - 反编译 & 动态调试 -Jeb&Adb 0 、模拟器开发者模式 - 启用开发者模式(快速单击 5 次关于平板电脑版本) - 系统 - 高级 - 开发者选项 - 启用 USB 调试模式 - 模拟器设置里面开启 root 及磁盘共享可写入 0 、 Jeb 环境配…

【传感器技术】电感式传感器,变磁阻式传感器。互感式传感器,电涡流式传感器

一、磁路 线圈通入电流后,产生磁通,分主磁通和漏磁通。 二、磁路的欧姆定律 对于环形线圈 磁路与电路对照 磁路的计算 在计算电机、电器等的磁路时,要预先给定铁心中的磁通(或磁感应强度),而后按照所给的…

UE利用RenderTaget在UI上渲染目标

创建RenderTaget2D 创建 半透明 用户界面 材质 , 透明度用1- 反转一下 创建WBP 把材质放进Image 创建Actor蓝图 添加摄像机 和 SceneCaptureComponent 场景捕获组件2D SceneCaptureComponent2D 可以选择排除不捕获的物体 关卡蓝图中 创建UI 把Actor拖入场景 就能显示了 运行…

如何使用windows下的vscode连接到本地虚拟机的linux

1.打开windows下的vscode 下载下图所示插件 下载完以后打开首选项选择设置搜索ssh 搜索ssh往下滑对下图打上勾 点击下图或者按ctrl shift P 搜索ssh 选择第一个,双击后 进入这个界面 好的window基本配置差不多 2.打开虚拟机 在终端中输入 sudo apt-get install…

STM32 搭配 嵌入式SD卡在智能皮电手环中的应用全景评测

在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业进入全新发展阶段。二者凭借低功耗、高速读写与卓越稳定性的深度融合,以及高容量低成本的突出优势,成为大规模…

国产突破:OLI-P白光干涉技术开启保偏光纤高精度检测新时代

在高速光通信与精密传感领域,保偏光纤的偏振稳定性是系统性能的“生命线”。然而,传统检测手段受限于灵敏度低、无法实现分布式测量,难以捕捉微弱的偏振耦合信号,导致隐性缺陷成为行业检测痛点。OLI-P偏振串扰分析仪,以…

多模态大语言模型arxiv论文略读(100)

Data Processing Techniques for Modern Multimodal Models ➡️ 论文标题:Data Processing Techniques for Modern Multimodal Models ➡️ 论文作者:Yinheng Li, Han Ding, Hang Chen ➡️ 研究机构: Columbia University、New York University ➡️ …

Idea 配置 Maven 环境

下载 Maven 官网:https://maven.apache.org/index.html 点击左侧 Downloads,然后选择 Files 中的 zip 包下载(下载慢可以使用迅雷) 配置 Maven 将压缩包解压,比如我解压后放到了 D:\developer\environment\apache-…

OpenWebUI(1)源码学习构建

1. 前言 通过docker镜像拉取安装就不介绍了,官方的命令很多。本节主要撸一撸源码,所以,本地构建 2. 技术框架和启动环境 后端python,前端svelte 环境要求:python > 3.11 ,Node.js > 20.10 3. 源…

基于SpringBoot的家政服务系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

Idea使用springAI搭建MCP项目

一、demo项目搭建 1、官方初始化项目下载 https://start.spring.io/ 2、解压下载好的压缩包 3、使用Idea打开项目 4、查看阿里云百炼api-key https://bailian.console.aliyun.com/?tabmodel#/api-key 5、配置到项目中 spring.ai.openai.api-keysk-xxxxxxxxxxxxxxxxxxxxxxx…

Deepseek系列之deepseek-v1

关于deepseek的系列模型,断断续续也看了相关paper,之前也做了部分记录但是一直没发出来,最近打算梳理下deepseek的系列模型,有个系统性的认识,后续可能再补个千问系列,部分细节持续更新~ Deepseek相关模型 …

AI生态警报:MCP协议风险与应对指南(上)——架构与供应链风险

MCP(Model Context Protocol,模型上下文协议)是一种为应用程序提供向大语言模型(LLM)传递上下文的统一协议。随着MCP协议成为AI生态的核心枢纽,其安全风险已从理论威胁转化为实际攻击目标。 MCP协议&#x…

PyQt6基础_QtCharts绘制横向柱状图

前置: pip install PyQt6-Charts 结果: 代码: import sysfrom PyQt6.QtCharts import (QBarCategoryAxis, QBarSet, QChart,QChartView, QValueAxis,QHorizontalBarSeries) from PyQt6.QtCore import Qt,QSize from PyQt6.QtGui import QP…

ssm 学习笔记 day02

AOP静态处理 现在我们编写一个加减乘除的组件(Bean) package com.atguigu.spring02aop.calculator.impl;import com.atguigu.spring02aop.calculator.MathCalculator; import org.springframework.stereotype.Component;Component public class MathCalculatorImpl implement…

无线通信模块赋能粮食烘干设备故障预判与远程诊断

一、项目背景 农业是我国国民经济的重要产业,粮食烘干作为粮食产后加工的关键环节,对于保障粮食质量、减少损耗具有重要意义。传统的粮食烘干设备通常需要人工现场监控和操作,不仅效率低下,而且容易受到人为因素的影响&#xff0…

Rerank的评测

RAG中如果第一次的召回不是很理想,最好优先排查一下相似度检索算法。如果发现是相似度算法的问题,那么可以增大top-k,然后引入更精确的算法进行rerank 针对rerank的评测,使用命中率(hit rate)和平均倒数排名…