参考链接:

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. SQL Server将自己的查询结果作为待查询数据子列之一

    嵌套子查询是SQL语句中比较常用的一种查询方法,开发过程中遇到查询需要将自己的某列作为待查询的数据,在参考别人的SQL语句的写法终于实现了自己需要的功能. 查询语句如下: SELECT DISTINC ...

  2. 今天给大家分享用Python matplotlib来写随机漫步的小程序

    先安装两个库: pip install matplotlib pip install numpy 引用库: import matplotlib.pyplot as mp import numpy as ...

  3. Android消息机制解析

    我们知道在编程时许多操作(如更新UI)需要在主线程中完成,而且,耗时操作(如网络连接)需要放在子线程中,否则会引起ANR.所以我们常使用Handler来实现线程间的消息传递,这里讨论的也就是Handl ...

  4. 为什么覆写equals必须要覆写hashCode?

    ============================================= 原文链接: 为什么覆写equals必须要覆写hashCode? 转载请注明出处! ============= ...

  5. WebCracker4.0和monster字典——路由器登陆密码破解工具

    路由器登陆密码破解,很伤cpu的

  6. Unity3D 心跳检测

    在B/S结构的项目开发的过程当中 在服务端与客户端正常的通信之外 服务端通常还需要知道客户端是否还处于连接状态 或者客户端也需要知道服务端是否还处在开启状态 大白话说完了,听一下比较正统的解释吧(摘自 ...

  7. 温故而知新—heap

    堆:堆不是STL中的容器组件,堆有分为大根堆和小根堆,堆的底层实现可以用优先队列进行实现.底层的容器实际上是一个vector.在C++数据结构中,堆也可用数组来实现.对于使用C++的开发人员来说,st ...

  8. 笔记:MyBatis XML配置-Settings 完整属性表

    设置参数 描述 有效值 默认值 cacheEnabled 该配置影响的所有映射器中配置的缓存的全局开关. true | false true lazyLoadingEnabled 延迟加载的全局开关. ...

  9. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  10. c++ --> c++中四种类型转换方式

    c++中四种类型转换方式   c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...