CentOS7.9 Nginx + EMQX集群组建 MQTTS平台

前面我们有介绍过单机版EMQX的安装 CentOS7 安装 EMQX(MQTT),今天我们来讲一下实际项目里用的到MQTTS平台。
一、EMQX单机配置
简单部署两个节点,修改对应配置文件 (/usr/local/emqx/etc/emqx.conf) 中的node内容:
name = “emqx@10.12.42.235”
name = “emqx@10.12.42.236”
cookie 值不要改动,在同一个集群里的阶段,cookie 必须一致。
data_dir 是只本机存储数据的路径,默认不要调整,执行 emqx 安装位置的 data目录,如:/usr/local/emqx/data
如果确实要调整,那只要修改主Node阶段对应的 data_dir 目录就可以了。
其它加入此集群的客户机,本地的数据目录会被清空,用于同步复制主 Node 的数据。
其余配置不变。
执行启动命令:

查看单机运行情况:


都已经正常运行。

二、加入EMQX集群
重要的事情说三遍:务必检查端口开放情况!务必检查端口开放情况!务必检查端口开放情况!
端口开放列表如下:MQTT端口:8083;Web控制台端口:18083;集群节点发现端口:4370;集群 RPC 端口:5370
所有节点的系统都需要开发以上端口!!!
当然,如果你关闭了防火墙的话,额,好吧,你不是项目环境页没关系。
当前我们设定的主 Node 为 emqx@10.12.42.235 这台机器。
在 emqx02@10.12.42.236 这台机器上,执行:
emqx_ctl cluster join emqx@10.12.42.235
返回结果:

至此,两台机器的EMQX集群就完成了,登录 Web控制台查看:

任何一个阶段登录到Web控制台,都能看到集群中的所有节点的状态。
同时,所有加入主节点的emqx,本机data中的数据都会被清空,用于同步复制一份主节点中的数据。
之后加入的节点也都是如此,本机原有数据被清除,用于同步已有集群中的数据,所有集群中的数据,都是保持同步的。

注意事项:
1、集群模式的端口策略:ListeningPort = BasePort + Offset 模式。
查看官方最新说明文档如下:

也就是说,如果你的 emqx.conf 配置文件中,node.name 是以数字结尾或者@前面是以数字结尾,如:emqx1、emqx-1、emqx01@10.12.42.235 等,那么对应的集群端口,包括发现端口和RPC端口,都需要增加对应的数字。
emqx01 发现端口和RPC端口分别是:4371 和 5371。
emqx-2 对应的就是:4372 / 5372。
以此类推。
这个在不知情的情况下,还蛮坑的。
我的node.name原来就是 emqx01@xx,让我多折腾了半天,才找到这个问题。
而且 RPC 端口都只有在官方文档里有直接说明,百度上找的,都是之前的版本和文档了,都没有提到,满满都是坑啊!
2、已经加入集群服务,任何节点重启之后还是会自动在集群里面的,不需要再加入。

三、SSL证书生成
如果是内网,请参考:内网IP自签SSL证书
如果是公网,请咨询证书提供商,或者服务器提供商。
提供相关资料就可以了,主要是域名资料,还有就是证书最好是域名通配符证书,可以用到所有的二级域名上,比较方便。

四、Nginx的stream模式配置
前面有篇文章:CentOS7 安装 Nginx,设置自启动及站点配置介绍过Nginx及HTTPS协议的配置。
这边有所不同,主要在于 Stream模式的配置。
在 Nginx 编译的时候,除了HTTPS的参数(–with-http_ssl_module)外,还需要加 stream 模式的参数:–with-stream 和 --with-stream_ssl_module。
合计安装配置参数如下:
./configure --with-stream --with-http_ssl_module --with-stream_ssl_module
安装完成后,配置 nginx 负载均衡如下:

stream {# 轮询负载均衡配置upstream emqx_cluster {server 10.12.42.235:1883 weight=1;server 10.12.42.236:1883 weight=1;}server {# 监听 8883 端口listen 8883 ssl;# 反向代理到 emqx_clusterproxy_pass emqx_cluster;proxy_buffer_size 4k;# 证书配置ssl_certificate /usr/local/nginx/cert/server.pem;ssl_certificate_key /usr/local/nginx/cert/server.key;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers  AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;ssl_session_cache  shared:SSL:10m;ssl_session_timeout  10m;}
}


注意:stream配置不能放到http内,也不能放到/etc/nginx/conf.d/,因为stream是通过tcp层转发,而不是http转发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539358.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqllab第十八关通关笔记

知识点: UA注入 不进行url解析,不能使用 %20 编码等操作出现在User-agent字段中一般为insert语句 insert 表名(字段1,字段2,。。。) values(数据1,数据2,。。。) 通过admin admin进行登录发现页面打印出了…

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024)

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 图像处理 基于图像的渲染 计算机视觉 可视化分析 模式识别 3D打印 渲染和动画 渲染技术 电脑动画 基于草图的建模 机械…

Spring boot创建第一个项目

作者简介: zoro-1,目前大二,正在学习Java,数据结构,spring等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Spring boot创建第一个项目 sp…

ELK日志管理实现的3种常见方法

ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…

TSINGSEE青犀AI烟火识别等算法打造电瓶车消防安全解决方案

一、背景分析 根据国家消防救援局的统计,2023年全国共接报电动自行车火灾2.1万起,相比2022年上升17.4%,电动自行车火灾安全隐患问题不容忽视。 电瓶车火情主要问题和原因: 电瓶车/电池质量良莠不齐用户安全意识薄弱&#xff0c…

增删卜易——八宫六十四卦

之前看倪海厦的《天纪》笔记里面提到了六十四卦世应,觉得不知道这个世应是啥意思。很长时间就没看了,偶然间看到了张文江教授写的一本书《潘雨廷先生谈话录》提到了《卜筮正宗》,“卜筮最后的判断是非理性转义,其他一切都只是形式”,“明人的著作,从京氏易出,如今天几日…

应用案例 | 基于三维机器视觉的自动化码垛解决方案

Part.1 行业背景 通过显扬科技三维机器视觉设备,搭配三维视觉分析系统,实现码垛的智能化升级,早期使用机器人码垛采用机械臂和简单的控制系统,码垛能力和效率较低。随着现代工业的发展,机器人码垛也开始采用先进的传感…

数据分析-Pandas多维数据平行坐标可视化

数据分析-Pandas多维数据平行坐标可视化 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…

《ElementPlus 与 ElementUI 差异集合》el-input 多包裹一层 el-input__wrapper

差异 element-ui el-input 中&#xff0c;<div class"el-input"> 下一级就是 <input> 标签 &#xff1b;element-plus el-input中&#xff0c;<div class"el-input"> 和 <input> 标签之间多了一层 <div class"el-input__…

opencv中的图像均值模糊—blur

平均模糊是通过对图像的每个像素及其周围像素的值求平均来实现的。 blur函数通过计算输入图像image中每个像素及其邻域内像素的平均值来工作。 // 图像卷积 void QuickDemo::Conv_image_demo(Mat &image) {Mat dst;blur(image, dst, Size(3, 3), Point(-1, -1));// Point(…

【论文阅读】MSGNet:学习多变量时间序列预测中的多尺度间序列相关性

MSGNet&#xff1a;学习多变量时间序列预测中的多尺度间序列相关性 文献介绍摘要总体介绍背景及当前面临的问题现有解决方案及其局限性本文的解决方案及其贡献 背景知识的相关工作背景知识问题表述&#xff1a; Method论文主要工作1.输入嵌入和剩余连接 (Input Embedding and R…

Vscode 修改C++版本

1. 首先要检查GCC版本&#xff0c;有的gcc版本过低会导致C版本升级不成功 可以用cmd&#xff0c;用gcc --version命令查看gcc版本 我这里就是gcc版本较低&#xff0c;不支持c17 需要先升级gcc版本 gcc与c对应的版本&#xff0c;大家可以在这位大佬的博客中看&#xff0c;写…