【转载】MQTT的学习之Mosquitto集群搭建
本文出自:http://www.cnblogs.com/yinyi521/p/6087215.html
文章钢要:
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)在从服务器中键入一下命令:
二、多集群部署
配置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服务器的基础配置
下一步对服务器的用户登录与权限进行配置。
【转载】MQTT的学习之Mosquitto集群搭建的更多相关文章
- Mosquitto搭建Android推送服务(三)Mosquitto集群搭建
文章钢要: 1.进行双服务器搭建 2.进行多服务器搭建 一.Mosquitto的分布式集群部署 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简 ...
- kafka学习(三)-kafka集群搭建
kafka集群搭建 下面简单的介绍一下kafka的集群搭建,单个kafka的安装更简单,下面以集群搭建为例子. 我们设置并部署有三个节点的 kafka 集合体,必须在每个节点上遵循下面的步骤来启动 k ...
- kafka学习(二)-zookeeper集群搭建
zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...
- redis 学习笔记-cluster集群搭建
一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http://www.redis.io/download 编译很简单,一个make命令即可,不清楚的同学,可参考我之前的笔记: red ...
- SpringCloud学习之—Eureka集群搭建
Eureka集群的搭建 上次说过了在SpringCloud应用中使用Eureka注册中心,用来对服务提供者进行服务注册与发现,但同时,它也是一个"微服务",单个应用使用空间有限,因 ...
- Hadoop学习之Hadoop集群搭建
1.检查网络状况 Dos命令:ping ip地址,同时,在Linux下通过命令:ifconfig可以查看ip信息2.修改虚拟机的ip地址 打开linux网络连接,在桌面右上角,然后编辑ip地址, ...
- 大数据学习——hadoop2.x集群搭建
1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=itcast ### ...
- 七、Mosquito 集群搭建
本章主要讲述Mosquitto 集群搭建的两种方式 1.进行双服务器搭建 2.进行多服务器搭建 一.Mosquitto的分布式集群部署 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料 ...
- Centos7.2 MQTT的学习之Mosquitto搭建&集群搭建&使用
下载安装包http://mosquitto.org/files/source/ 安装依赖yum install -y gcc gcc-c++ libstdc++-develyum install -y ...
随机推荐
- Java面向对象_静态代理模式
概念:为其它对象提供一种代理以控制对这个对象的访问.代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. public clas ...
- koa2 从入门到进阶之路 (五)
之前的文章我们介绍了一下 koa 中使用 ejs 模板及页面渲染,本篇文章我们来看一下 koa post提交数据及 koa-bodyparser中间件. 在前端页面中,不免会用到 form 表单和 p ...
- 【Windows】命令行查询占用端口信息
Windows上查询443端口被占用的信息: NETSTAT.EXE -nao | findstr "443" 查询结果 杀掉进程: tskill 2888
- 使用:/usr/bin/phpize 报错
使用:/usr/bin/phpize 出现下面错误提示 Can't find PHP headers in /usr/include/php The php-devel package is requ ...
- Maven的学习资料收集--(三)使用Maven构建Web项目
新建Maven项目 File - New - Other 选择Maven Project 单击Next 保持默认即可单击Next 选择Archetype为 web app单击Next 输入一些必要信息 ...
- Aspx比较简单的登录
客户端 <form id="form1" runat="server"> <div> 用户名:<input type=" ...
- 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目
在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内容,新写了本章节,先教大家在工作中如何搭建一个多模块的spr ...
- *.rpm is not signed解决
1.# yum install qemu*报错如下:Package qemu-kvm-tools-0.12.1.2-2.113.el6.x86_64.rpm is not signed2.解决# vi ...
- html 02-认识html
1. HTML 初识 HTML 指的是超文本标记语言 (Hyper Text Markup Language)是用来描述网页的一种语言. HTML 不是一种编程语言,而是一种标记语言 (markup ...
- ORACLE 数据库的级联查询 一句sql搞定(部门多级)
在ORACLE 数据库中有一种方法可以实现级联查询 select * //要查询的字段 from table //具有子接点ID与父接点I ...