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 來進行實驗把。

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