天天看點

Mosquitto叢集搭建 文章鋼要:

文章鋼要:

1、進行雙伺服器搭建

2、進行多伺服器搭建

一、Mosquitto的分布式叢集部署

如果需要做并發量很大的時候就需要考慮做叢集處理,但是我在查找資料的時候發現并不多,是以整理了一下,搭建簡單的Mosquitto叢集模式。

首先叢集需要2台以上的Mosquitto伺服器。安裝方式同上。

先了解下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服務。如果配置無誤主伺服器在開啟的時候,會自動連接配接所有從伺服器,顯示如下:

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配置無誤,并且本地字首與遠端字首拼寫正确,那麼會顯示如下圖資訊,表示叢集配置成功 在從伺服器訂閱,在主伺服器發送,從伺服器訂閱者收到資訊:  

Mosquitto叢集搭建 文章鋼要:

以上雙叢集配置完成。也比較簡單。 下面對多叢集配置進行闡述。

二、多叢集部署

配置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節點變成下面形式:

Mosquitto叢集搭建 文章鋼要:
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叢集搭建 文章鋼要:

紅色部分為新增加的伺服器。重新開機Mosquitto伺服器即可。

3、測試訂閱、釋出

測試理論與第一節類似:

分别在88與89伺服器中輸入mosquitto_sub -t myhouse/room1/#  訂閱資訊

在53伺服器中輸入mosquitto_pub -t sensor/room1/temperature -m '26.3' 釋出消息

同僚88與89都會收到“26.3”這條資訊。如果隻有一台伺服器收到說明配置有問題。