--------------------------------------------------------前言-------------------------------------------------------------------node
目前,官方的版本中,是沒有集羣功能的。官方說,能夠使用bridge功能,將多個mqtt broker鏈接在一塊兒。服務器
筆者查找了網上的配置,大部分爲以下配置:負載均衡
圖一tcp
在主節點192.168.1.1的mosquitto.conf中,配置:ui
connection nodeA
address 192.168.1.5:1883
topic # both 0
connection nodeB
address 192.168.1.6:1883
topic # both 0
如上圖所示,確實能夠實現集羣,可是有一個問題,若是主(192.1638.1.3)服務器down機,則全部的從服務器將會變成孤立的節點。spa
這個時候,筆者第一反應是,在添加一個主服務器,不就能夠了嗎,以下圖所示:.net
圖二3d
bridge-2與bridge的配置相同。在筆者沾沾自喜之際,同組的同事問我,是我一直在向mosquitto中寫消息嗎。code
仔細檢查配置,怎麼會一直寫消息呢,查看消息,是同樣的。是的,死循環了。orm
mosquitto的橋接模式,本質上是pub/sub。
橋接配置中,在topic後有一個both/in/out的配置,是配置topic中的消息被轉發的方向的,both:雙向,in:進,out:出
筆者在圖二中,都配置了both,則出現了死循環。如消息發送到3 , 3--->5 , 5--->4 , 4--->3 。
------------------------------------------------正文-----------------------------------------------------------------------------------------
仍然存在的問題:
(1)若是在增長bridge節點,須要修改多個節點的配置,而且重啓,維護成本高。
(2)tcp長鏈接的負載均衡,由客戶端來創建鏈接。客戶端鏈接斷開後,再次請求會從新創建鏈接,這時候,lvs將鏈接轉發到存活節點,並創建長連接。當down機節點啓動後,已經鏈接到其餘節點的鏈接,不會再被負載到這臺機器,只能等待從新鏈接,容易形成負載不均衡。
(3)keepalived的檢查。keepalived在檢查時,會不停的請求1883端口。
參考:
https://blog.csdn.net/Z729685731/article/details/70142182
https://stackoverflow.com/questions/26280208/cluster-forming-with-mosquitto-broker