mosquitto 集群

Mosquitto的分布式集群部署

物联网交流群:651219170

如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简单的Mosquitto集群模式。
首先集群需要2台以上的Mosquitto服务器。安装方式以前的章节有。
先了解下Mosquitto集群模式的逻辑图,如下:

这里写图片描述

可以看出,master 这一台分别作为 broker1, 和 broker2 的客户端。订阅 broker1 的转发到 broker2。订阅 broker2 的转发到 broker1。所以这个集群是伪集群,master 一旦宕机那么集群通讯就失败了。mosquitto 是可以做真正的集群。但是运维太麻烦了,如果不是经常出事情的话,就不需要了。

优点:
伪集群方便之处在于只要把 master 特殊配置一下,其他的 broker1 都不需要改动。增加,删除 broker 都比较方便。
缺点
master 宕机之后集群不能相互通讯。

开启服务器桥连接,编译

进入安装目录
cd mosquitto-1.4.9/
打开config.mk文件
vi config.mk
找到WITH_BRIDGE:=yes 将签名的“#”号去掉开启桥连接模式。(默认是开启的,为了无误查看一下)
mdir build && cd build
cmake ../
make -j8

安装部署

1.创建三个目录。一个主的作为中转中心。两个普通节点。
mkdir mosquitto-master && mkdir mosquitto-broker1 && mkdir mosquitto-broker2

2.把刚刚编译出的几个可执行程序 (mosquitto,mosquitto_passwd,mosquitto_pub,mosquitto_sub) 拷贝到两个目录下。
我的是用 cmake 编译的。所以会在编译目录的 src, 和 client 目录下找到。
cp src/mosquitto* ~/mosquitto-master && cp client/mosquitto_* ~/mosquitto-master
cp src/mosquitto* ~/mosquitto-broker1&& cp client/mosquitto_* ~/mosquitto-broker1
cp src/mosquitto* ~/mosquitto-broker2&& cp client/mosquitto_* ~/mosquitto-broker2

3.在每个目录下添加 etc 目录,然后把 mosquitto.conf 拷贝过去。

4.修改配置文件,使用不同的端口。打开各自的配置文件。(如果是在不同的机器上就不需要这一步)
mosquitto-master 使用 1883 端口。
mosquitto-broker1 使用 1884 端口。
mosquitto-broker2 使用 1885 端口。

5.修改 master 的配置文件。

配置mosquitto.conf的桥连接属性

在 master 配置文件做如下配置

connection broker1
address 127.0.0.1:1884
topic # both 2 "" ""
remote_username master
remote_password master


connection broker2
address 127.0.0.1:1885
topic # both 2 "" ""
remote_username master
remote_password master

bridge_protocol_version mqttv311
notifications true
cleansession true
try_private true
start_type automatic

参数详细介绍

topic 非常重要
topic pattern [[[ out | in | both ] qos-level] local-prefix remote-prefix]
定义了一个主题(可以使用通配符)来设置两个 broker 之间的通信。
第二个参数:
in:从其他的 broker 接收共享的消息将使用此策略。
out:向其他的节点发布数据将使用此策略。
both:即向其他的节点发布数据,也从其他的节点接收数据将使用此策略。
第三个参数:
qos-level 和 QOS 一样。默认是 0
第四个参数:
local-prefix 主题前缀(详见后面介绍)
第五个参数:
remote-prefix 主题前缀(详见后面介绍)

对于 in 主题,会用 remote_prefix+pattern 去匹配远端发布数据的主题。当匹配成功了 remote_prefix 将备移除,然后增加 local_prefix 作为主题发布到本机(避免向其他的 broker 循环发送)。
对于 outgoing 主题 .会用local_prefix+pattern 去匹配主题本地要发布数据的主题。当匹配成功了 local_prefix+pattern 会被去掉,然后增加 remote_prefix(即 remote_prefix+真实主题)发送到其他的 broker。

注意:如果你开启了认证模式,那么你就要在每个 connection 后配置
remote_username master
remote_password master
并且要在 broker 里面能够认证通过 master 这个用户。

好了,集群搭建完毕,使用客户端分别链接 master , broker1, broker2 来进行实验把。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章