MQTT的学习之Mosquitto集群搭建

news2024/11/17 9:52:37

文章钢要:

1、进行双服务器搭建

2、进行多服务器搭建

一、Mosquitto的分布式集群部署

如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简单的Mosquitto集群模式。

首先集群需要2台以上的Mosquitto服务器。安装方式同上。

先了解下Mosquitto集群模式的逻辑图,如下:

可以看出,无论在那台服务器中订阅了信息,无论在那台服务器上发布信息,订阅者都可以收到发布的信息。那么下一步我们着手搭建集群服务器,为了方便只演示2台服务器之间的集群搭建。

集群部署有一个专有名词叫做“桥接”,实现桥接的方式需要修改config.mk与mosquitto.conf文件。值得说明的是如果有10台服务器做Mosquitto集群,每台服务器上将桥连接打开,然后只需要更改一台服务器上的Mosquitto.conf文件即可,其他服务器的Mosquitto.conf文件不需要做任何改动。大大方便了集群的维护。如果有新的服务器加入或删除只需要修改主服务器的Mosquitto.conf即可。

1、开启服务器桥连接

进入安装目录

cd mosquitto-1.4.9/

打开config.mk文件

vi config.mk

找到WITH_BRIDGE:=yes 将签名的“#”号去掉开启桥连接模式。(默认是开启的,为了无误查看一下)

2、配置Mosquitto.conf的桥连接属性

进入etc目录,并且打开Mosquitto.conf文件

cd /etc/mosquitto/

vi mosquitto.conf

找到Bridges节点,在下面加入如下代码:

connection mytest
address 10.19.22.53:1883
topic room1/# both 2 sensor/ myhouse/
bridge_protocol_version mqttv311
notifications true
cleansession true
try_private true
start_type automatic

---------------------------------------------------------------------------------

connection 连接名称,可以随便取

address 连接的另外服务器地址和端口号,如果有多台服务器,可以写多个address

topic 主题名称,“#”为通配符,表示发布端可以在room1/后面接任何文字

both 服务质量,2代表只有一次(可以查看第一篇博文对MQTT的详细介绍)

sensor/  本地前缀标识,可以随便命名

myhouse/ 远程前缀标识,可以随便命名

bridge_protocol_version mqttv311 桥连接协议版本MQTT3.11

notifications  是否发布桥接的状态信息

cleansession  桥接断开时,是否清除远程服务器中的消息

start_type 桥接模式,目前有三种:automatic、lazy、once

设置好之后保存退出。

3、开启服务器

第一步先确保从服务器先开启,第二步重新启动主服务器的Mosquitto服务。如果配置无误主服务器在开启的时候,会自动连接所有从服务器,显示如下:

Mytest实在Mosquitto.conf配置中设定的我的连接名称,后面是从服务器的地址与端口号

如上图所示,主服务器与从服务器已经桥接完成。

4、验证发布/订阅

集群的特点在任何服务器上都可以订阅与发布,并且订阅者可以收到在任何服务器中发送去信息。

测试场景:在从服务器中订阅一条信息,在主服务器中发布一条信息,从服务器的订阅者可以收到从主服务器中发布的消息。

(1)在从服务器中键入一下命令:

mosquitto_sub -t myhouse/room1/#

注意:myhouse/ 是编写Mosquitto.conf中topic的远程前缀。

room1/#是topic中的订阅主题

(2)在主服务器中键入一下命令:

mosquitto_pub -t sensor/room1/temperature -m '26.3'

注意:sensor/ 是编写Mosquitto.conf中topic的本地前缀。

room1/ 是topic中的订阅主题

temperature  相当与“#”通配符 

如果Mosquitto.conf配置无误,并且本地前缀与远程前缀拼写正确,那么会显示如下图信息,表示集群配置成功

在从服务器订阅,在主服务器发送,从服务器订阅者收到信息:

以上双集群配置完成。也比较简单。

下面对多集群配置进行阐述。

二、多集群部署

配置3台服务集群与3+n台理论一样,所以这里配置3台服务集群作为演示。

1、安装服务器

首先在上述2台服务器基础上,再增加一台服务器,配置步骤请参考第二篇博文。

2、配置服务器

假设有3台服务器分别是

192.168.0.53

192.168.0.88

192.168.0.89

其中53为主服务器,88与89为从服务器。

所以在88与89上只需要正常安装Mosquitto服务即可,其他不需要做任何配置。

重点还是在53的mosquitto.conf中配置。

依然打开mosquitto.conf,找到Bridge节点,重新复习一下节点中每个配置项的含义

#connection <name>
#address <host>[:<port>] [<host>[:<port>]]
#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

笔者一开始错误的认为红色字体部分是配置第二台服务器使用的,但是笔者错了。每一个connection只能有一个IP地址,address红色的部分是留有多个ip的保存。(貌似是对前地址的一个备份,如果前地址服务器挂了可以立马接手备用服务器,笔者尚未证实)

如果想增加一台服务器只需要重新添加connection、address、topic节点即可。因此Bridge节点变成下面形式:

connection mytest
address 192.168.0.88:1883
topic room1/# both 2 sensor/ myhouse/

connection mytest2
address 192.168.0.89:1883
topic room1/# both 2 sensor/ myhouse/

bridge_protocol_version mqttv311
notifications true
cleansession true
try_private true
start_type automatic

红色部分为新增加的服务器。重启Mosquitto服务器即可。

3、测试订阅、发布

测试理论与第一节类似:

分别在88与89服务器中输入mosquitto_sub -t myhouse/room1/#  订阅信息

在53服务器中输入mosquitto_pub -t sensor/room1/temperature -m '26.3' 发布消息

同事88与89都会收到“26.3”这条信息。如果只有一台服务器收到说明配置有问题。

以上配置完成了对Mosquitto服务器的基础配置

下一步对服务器的用户登录与权限进行配置。

可以看出,无论在那台服务器中订阅了信息,无论在那台服务器上发布信息,订阅者都可以收到发布的信息。那么下一步我们着手搭建集群服务器,为了方便只演示2台服务器之间的集群搭建。

集群部署有一个专有名词叫做“桥接”,实现桥接的方式需要修改config.mk与mosquitto.conf文件。值得说明的是如果有10台服务器做Mosquitto集群,每台服务器上将桥连接打开,然后只需要更改一台服务器上的Mosquitto.conf文件即可,其他服务器的Mosquitto.conf文件不需要做任何改动。大大方便了集群的维护。如果有新的服务器加入或删除只需要修改主服务器的Mosquitto.conf即可。

1、开启服务器桥连接

进入安装目录

cd mosquitto-1.4.9/

打开config.mk文件

vi config.mk

找到WITH_BRIDGE:=yes 将签名的“#”号去掉开启桥连接模式。(默认是开启的,为了无误查看一下)

2、配置Mosquitto.conf的桥连接属性

进入etc目录,并且打开Mosquitto.conf文件

cd /etc/mosquitto/

vi mosquitto.conf

找到Bridges节点,在下面加入如下代码:

connection mytest
address 10.19.22.53:1883
topic room1/# both 2 sensor/ myhouse/
bridge_protocol_version mqttv311
notifications true
cleansession true
try_private true
start_type automatic

---------------------------------------------------------------------------------

connection 连接名称,可以随便取

address 连接的另外服务器地址和端口号,如果有多台服务器,可以写多个address

topic 主题名称,“#”为通配符,表示发布端可以在room1/后面接任何文字

both 服务质量,2代表只有一次(可以查看第一篇博文对MQTT的详细介绍)

sensor/  本地前缀标识,可以随便命名

myhouse/ 远程前缀标识,可以随便命名

bridge_protocol_version mqttv311 桥连接协议版本MQTT3.11

notifications  是否发布桥接的状态信息

cleansession  桥接断开时,是否清除远程服务器中的消息

start_type 桥接模式,目前有三种:automatic、lazy、once

设置好之后保存退出。

3、开启服务器

第一步先确保从服务器先开启,第二步重新启动主服务器的Mosquitto服务。如果配置无误主服务器在开启的时候,会自动连接所有从服务器,显示如下:

Mytest实在Mosquitto.conf配置中设定的我的连接名称,后面是从服务器的地址与端口号

如上图所示,主服务器与从服务器已经桥接完成。

4、验证发布/订阅

集群的特点在任何服务器上都可以订阅与发布,并且订阅者可以收到在任何服务器中发送去信息。

测试场景:在从服务器中订阅一条信息,在主服务器中发布一条信息,从服务器的订阅者可以收到从主服务器中发布的消息。

(1)在从服务器中键入一下命令:

mosquitto_sub -t myhouse/room1/#

注意:myhouse/ 是编写Mosquitto.conf中topic的远程前缀。

room1/#是topic中的订阅主题

(2)在主服务器中键入一下命令:

mosquitto_pub -t sensor/room1/temperature -m '26.3'

注意:sensor/ 是编写Mosquitto.conf中topic的本地前缀。

room1/ 是topic中的订阅主题

temperature  相当与“#”通配符 

如果Mosquitto.conf配置无误,并且本地前缀与远程前缀拼写正确,那么会显示如下图信息,表示集群配置成功

在从服务器订阅,在主服务器发送,从服务器订阅者收到信息:

以上双集群配置完成。也比较简单。

下面对多集群配置进行阐述。

二、多集群部署

配置3台服务集群与3+n台理论一样,所以这里配置3台服务集群作为演示。

1、安装服务器

首先在上述2台服务器基础上,再增加一台服务器,配置步骤请参考第二篇博文。

2、配置服务器

假设有3台服务器分别是

192.168.0.53

192.168.0.88

192.168.0.89

其中53为主服务器,88与89为从服务器。

所以在88与89上只需要正常安装Mosquitto服务即可,其他不需要做任何配置。

重点还是在53的mosquitto.conf中配置。

依然打开mosquitto.conf,找到Bridge节点,重新复习一下节点中每个配置项的含义

#connection <name>
#address <host>[:<port>] [<host>[:<port>]]
#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

笔者一开始错误的认为红色字体部分是配置第二台服务器使用的,但是笔者错了。每一个connection只能有一个IP地址,address红色的部分是留有多个ip的保存。(貌似是对前地址的一个备份,如果前地址服务器挂了可以立马接手备用服务器,笔者尚未证实)

如果想增加一台服务器只需要重新添加connection、address、topic节点即可。因此Bridge节点变成下面形式:

connection mytest
address 192.168.0.88:1883
topic room1/# both 2 sensor/ myhouse/

connection mytest2
address 192.168.0.89:1883
topic room1/# both 2 sensor/ myhouse/

bridge_protocol_version mqttv311
notifications true
cleansession true
try_private true
start_type automatic

红色部分为新增加的服务器。重启Mosquitto服务器即可。

3、测试订阅、发布

测试理论与第一节类似:

分别在88与89服务器中输入mosquitto_sub -t myhouse/room1/#  订阅信息

在53服务器中输入mosquitto_pub -t sensor/room1/temperature -m '26.3' 发布消息

同事88与89都会收到“26.3”这条信息。如果只有一台服务器收到说明配置有问题。

以上配置完成了对Mosquitto服务器的基础配置

下一步对服务器的用户登录与权限进行配置。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Win11搜索栏无法使用怎么办?

随着Windows 11的正式发布&#xff0c;许多用户已经升级了他们的操作系统。但是安装Win11系统之后&#xff0c;人们发现它有一些问题。例如&#xff0c;Win11搜索栏无法使用&#xff0c;这极大地影响了用户体验。那我们该如何解决Windows搜索栏用不了这一问题&#xff1f;方法1…

Matplotlib精品学习笔记002-Pyplot详解,快速绘图

Matplotlib精品学习笔记002-Pyplot详解&#xff0c; matplotlib.pyplot集合了一系列功能&#xff0c;运行起来和MATLAB相似。 每个pyplot功能都会对画布&#xff08;figure&#xff09;进行修改&#xff1a;包括创建画布&#xff0c;在画布上创建一个画图区&#xff0c;向画图…

【JVM】垃圾回收器

垃圾回收器 Serial收集器 单线程&#xff0c;进行垃圾收集工作时必须暂停其他所有的工作线程。STW造成了不好的用户体验。 新生代采用复制算法&#xff0c;老年代采用标记整理算法。 Serial Old Serial 收集器的老年代版本&#xff0c;它同样是一个单线程收集器。它主要有两…

FairGuard-Windows加固工具版本更新日志

FairGuard-Windows加固工具1.2.2版本更新日志&#xff1a; ■ 增加Unity Resources资源加密的支持; ■ 增加单独Assetbundle资源加密&#xff0c;并同时支持压缩包和文件夹作为输入的方式; ■ 增加对游戏原文件夹加固的支持; Windows加固方案介绍 FairGuard专为游戏量身定…

IntelliJ IDEA 安装JRebel实现热部署详细版(亲测有效)

简介 JRebel可快速实现热部署&#xff0c;节省了大量重启时间&#xff0c;提高了个人开发效率。 JRebel是一款JVM插件&#xff0c;它使得Java代码修改后不用重启系统&#xff0c;立即生效。 安装JRebel 1.file–>setting–>plugins–>在Marketplace的搜索框输入JRe…

【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库

前提&#xff1a;Flask使用SQLAlchemy数据库 本质&#xff1a;依赖包版本不匹配 问题1&#xff1a;报错RuntimeError&#xff1a;working outside of application context. 运行程序报错&#xff0c;如下错误&#xff1a; 原因&#xff1a;flask-sqlalchemy 版本过高导致&am…

试题 算法训练 自行车停放

问题描述 有n辆自行车依次来到停车棚&#xff0c;除了第一辆自行车外&#xff0c;每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有3辆自行车&#xff0c;从左到右编号为&#xff1a;3,5,1。现在编号为2的第4辆自行车要停在5号自行车的左…

python自学之《21天学通Python》(16)——第19章 用Pillow库处理图片

Pillow是Python2.X时代比较流行的Python ImagingLibrary&#xff08;简称Pillow&#xff09;图像处理库的分支&#xff0c;并修复了一些bug。Pillow提供了对Python3的支持&#xff0c;为Python3解释器提供了图像处理的功能。和Pillow库一样提供了广泛的文件格式支持、高效的内部…

IDEA如何创建一个springboot项目

要想进入springboot的殿堂&#xff0c;你的跨进springboot的门槛&#xff0c;下面就是使用IDEA初始话一个简单的springboot项目。 选择Create New Project 选择Spring Initializer——>选择对应的jdk版本——>Default默认在线构建&#xff0c;需要联网噢 选择自己想写…

2005-2019年我国地级市国内外旅游人数和收入数据

旅游产业的发展情况是一个城市经济和文化影响力的重要指标&#xff0c;我们在很多研究中都会用到旅游相关的数据&#xff0c;之前我们介绍过1978-2020年的中国旅游统计年鉴和2022年13604条的全国A级景区数据&#xff08;可以查看之前推送的文章&#xff09;。 本次我们为大家介…

上传文件-课后程序(JAVA基础案例教程-黑马程序员编著-第九章-课后作业)

【案例9-3】 客户端向服务端上传文件 【案例介绍】 1.案例描述 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文…

网络基础之IP地址和子网掩码

一、IP地址IP地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一个逻辑地址&#xff0c;以此来屏蔽物理地址的差异。习惯上&#xff0c;我们用分成四段的十进制数表示IP地址&#xff0c;从0.0.0.0 一直到255.255.255.255。互联网上的…

虚拟内存原理

局部性原理 计算机组成原理里我们可以知道cache掉入的数据都是连续的 我们可以看下面的例子&#xff0c;data创建的数组&#xff0c;因为我们要读入的是这个数组所以调入的是这一段内存的内容就大概率不会miss 但是我们要知道有些程序的代码被执行的几率是很小的&#xff0c;…

通达信KDJ抄底指标公式,利用J值小于0

前几天介绍了平滑KDJ指标公式&#xff0c;当时有人提出来不建议处理KDJ&#xff0c;KDJ的特点是灵敏&#xff0c;经过处理后就失去其意义了。不过我认为每种指标有相应的使用场景&#xff0c;不必拘泥于原始指标&#xff0c;指标也是人想出来的。今天就利用KDJ的灵敏&#xff0…

Windows下curl编译,使用vcpkg定制自己的【curl】。

本篇介绍在Windows下如何编译curl&#xff0c;curl自称是星球上最好用的计算机网络工具&#xff0c;但是它在windows上纯手动编译很困难&#xff0c;我们使用vcpkg来简化它的编译&#xff0c;方便我们使用。 目录 一、CURL介绍 二、vcpkg下载、编译、定制【curl】 三、编写…

代码随想录算法训练营第十五天 | 层序遍历 、226.翻转二叉树、101.对称二叉树

打卡第15天&#xff0c;今天继续二叉树 今日任务 层序遍历10道题226.翻转二叉树101.对称二叉树 层序遍历10道题 题单 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个…

工作篇:触摸屏原理介绍

一、触摸屏概述 触摸屏作为一种新的输入设备&#xff0c;它是目前最简单、方便、自然的一种人机交互方式。 当接触了屏幕上的图形按钮时&#xff0c;屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置&#xff0c;可用以取代机械式的按钮面板&#xff0c;并借由液晶…

《PMBOK 指南第七版》初识

个人理解&#xff1a; 体系构建变化非常大&#xff0c;7版延续6版的内容&#xff0c;但对项目管理的视角完全不同&#xff0c;系统化的思考方式10知识领域 到 12管理原则的转变&#xff0c;突出了对变化的敏捷应对&#xff0c;体现管理的有效性5过程域 到 8 绩效域的转变&…

Android源码分析 - InputManagerService与触摸事件

0. 前言 有人问到&#xff1a;“通过TouchEvent&#xff0c;你可以获得到当前的触点&#xff0c;它更新的频率和屏幕刷新的频率一样吗&#xff1f;”。听到这个问题的时候我感到很诧异&#xff0c;我们知道Android是事件驱动机制的设计&#xff0c;可以从多种服务中通过IPC通信…

03 Android基础--fragment

03 Android基础--fragment什么是fragment&#xff1f;fragment生命周期&#xff1f;动态的fragment与静态的fragmentfragment常用的两个类与APIFragment与Activity通信什么是fragment&#xff1f; 碎片&#xff0c;一个activity中可以使用多个fragment&#xff0c;可以把activi…