参考链接:

http://blog.csdn.net/z729685731/article/details/70142182

http://blog.csdn.net/yuhaiyang457288/article/details/73927889

集群效果:无论在哪台服务器中订阅的信息,无论在哪台服务器上发布了信息,订阅者都可以收到发布的信息。

集群部署:桥接模式

  • 桥接方式的实现需要修改config.mk与mosquitto.conf文件。
  • 每台服务器都开启了“桥接”模式,更改任何一台服务器上的Mosquitto.conf文件,其他服务器的Mosquitto.conf文件随之变化。
  • 新服务器的加入或删除只需要修改主服务器的Mosquitto.conf即可。

一、双节点模式

1、开启服务器桥接模式(默认开启)

进入安装目录
cd mosquitto-1.4.9/
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代表只有一次

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、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”这条信息。如果只有一台服务器收到说明配置有问题。

Mosquito集群模式的更多相关文章

  1. Redis学习笔记~conf自主集群模式

    回到目录 Redis自主提供了集群模式,当然也只是比较简单的读写分离模式,或者叫主从模式,它在各个redis服务端自己做数据同步机制,当然就是将主服务端的信息同步到各个slave服务器上,在客户端集成 ...

  2. 就publish/subscribe功能看redis集群模式下的队列技术(一)

    Redis 简介 Redis 是完全开源免费的,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中 ...

  3. Greenplum源码编译安装(单机及集群模式)完全攻略

    公司有个项目需要安装greenplum数据库,让我这个gp小白很是受伤,在网上各种搜,结果找到的都是TMD坑货帖子,但是经过4日苦战,总算是把greenplum的安装弄了个明白,单机及集群模式都部署成 ...

  4. 在集群环境中使用 EhCache 缓存系统|RMI 集群模式

    RMI 是 Java 的一种远程方法调用技术,是一种点对点的基于 Java 对象的通讯方式.EhCache 从 1.2 版本开始就支持 RMI 方式的缓存集群.在集群环境中 EhCache 所有缓存对 ...

  5. Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

    Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续) 今天延续昨天的内容,主要对为什么一个处理会分解成多个Job执行进行解析. 让我们跟踪下Job调用过 ...

  6. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  7. Zookeeper实战之单机集群模式

    前一篇文章介绍了Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下.今天由于手头机器不足,所以今天打算在一台机器上部署三个Zook ...

  8. Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括:    Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...

  9. IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括: IntelliJ IDEA的下载  IntelliJ IDEA的安装 IntelliJ IDEA中的scala插件安装 用SBT方式来创建工程 或 选择Scala方式来创建工程 本地模式或集群 ...

随机推荐

  1. createjs绘制扇形的方法

    扇形由三段线条组成,两条直线和一条弧线,直线可以用createjs中的lineTo函数画出,弧线用Graphics.arc函数来画. 一.关于createjs中的Graphics.Arc API Gr ...

  2. button 和input 的区别及在表单form中的用法

    先说一下button 和input的定义: <button> 标签定义的是一个按钮 1.在 <button> 元素内部,您可以放置任何内容,比如文本或图像.这是该元素与使用 & ...

  3. 关于Videodownload helper的下载问题

    Videodownload helper是火狐浏览器的一个视频音频嗅探插件, 解压文件的时候处于解压状态还没有解压完的时候不能关闭原来的窗口 所以这个下载软件也同理.没有下载完一个视频之前不能把这个窗 ...

  4. Xshell提示缺失mfc110.dll

    xshell  应用程序无法正常启动0xc000007b    下载 DirectX修复工具_3.3 Xshell 缺少 mfc110.dll     https://www.microsoft.co ...

  5. Linux中安装字体

    Linux中安装字体 查看系统中的字体 fc-list 查看系统中的中文字体 fc-list :lang=zh将然后将字体文件拷贝到/usr/share/fonts/中 cp aa.ttl /usr/ ...

  6. PHP 简单的加密解密方法

    本算法的基础:给定字符A B,A^B=C,C^B=A,即两次异或运算可得到原字符.实现代码如下: /** * @desc加密 * @param string $str 待加密字符串 * @param ...

  7. js中的Hook

    1. 简单理解: hook(钩子)就是: 把将要执行的的函数或者一系列动作注册到一个统一的接口下面, 当应用程序调用此接口(即hook)时,就等于调用了这一系列动作.

  8. 常用的Oracle函数收集

    to_char(); count(); avg(); sum(); to_date('时间','格式'); NVL(,); NVL2(); substr(); case   when  then   ...

  9. paho.mqtt.c打印日志

    mqtt中自身就带有日志系统Log.h和Log.c,这些日志文件是在客户端调用MQTTClient_create函数是初始化的,MQTTClient_create源码如下: int MQTTClien ...

  10. [Luogu 1122] 最大子树和

    题目 Description 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题 ...