文章鋼要:
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)在從伺服器中鍵入一下指令:
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隻能有一個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”這條資訊。如果隻有一台伺服器收到說明配置有問題。