Coolpy7分佈式物聯網MQTT集群搭建

Coolpy7分佈式技術,支持多個Coolpy7 Core提供跨數據中心(多活)模式組建群集,支持群集零手動維護(基於Gossip分佈式協議作為群集節點狀態維護)。Coolpy7從版本號V7.3.2.3開始支持本功能。請到Coolpy7之github項目release下載相關版本https://github.com/Coolpy7/Coolpy7/releases。也可以通過docker安裝。


Coolpy7分佈集群設計‌

Coolpy7消息服務器集群基於Gossip協議作為服務發現,基於UDP作為集群節點間消息轉發通信的分佈式設計,集群原理可簡述為下述幾條規則:

  1. 所有節點獨立維護自有的身份驗證、訂閱、取消訂閱事件處理
  2. 集群之間只會轉發PUBLISH消息,並且消息體少於63K的消息
  3. 節點內組播消息不被轉發,只在當前節點有效
  4. 集群之間不保證消息不丟失,只轉發消息到所有在線節點,轉發會忽略離線節點
  5. 客戶端連接某一個節點後,將會收到來自其他節點給它的消息(於訂閱的主題)

Coolpy7集群架構圖


Coolpy7分佈式物聯網MQTT集群搭建

消息分發流


Coolpy7分佈式物聯網MQTT集群搭建

手動配置管理集群

假設部署三臺服務器 192.168.1.100, 192.168.1.101, 192.168.1.102 上部署集群:

節點名 IP

node1 192.168.1.100

node2 192.168.1.101

node3 192.168.1.102

節點名不允許重複,否則群集將無法自動維護集群狀態

節點1:192.168.1.100節點設置

<code># 下載服務器端
sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/go_build_Coolpy7_go_linux.zip
# 解壓文件
unzip go_build_Coolpy7_go_linux.zip
# 提權
chmod -R 777 go_build_Coolpy7_go_linux
# 啟動Coolpy7 啟動參數
# csk 集群服務同步驗證token,集群各節點轉發消息時驗證此口令,防止惡意入侵集群
# nid 集群節點名稱,必須集群中唯一
# mbs 連接集群其他節點,只需填其他節點信息,以半角豆號分隔多個節點信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node1 -mbs=192.168.1.101:7946,192.168.1.102:7946

# 啟動成功後會打印如下信息,即說明服務端已正常啟動,host於1883端口,請確保相關防火牆配置可用

2020/02/14 14:48:27 cluster on udp 192.168.1.100:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1/<code>

打印消息提示,群集使用UDP的7946端口進行集群服務發現,UDP的7947端口進行消息同步服務。

如需自定義端口可通過啟動參數

-crp int 集群發現端口(UDP) (default 7946)

-csp int 集群同步端口(UDP) (default 7947)

節點2:192.168.1.101節點設置

<code># 下載服務器端
sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/go_build_Coolpy7_go_linux.zip
# 解壓文件
unzip go_build_Coolpy7_go_linux.zip
# 提權
chmod -R 777 go_build_Coolpy7_go_linux
# 啟動Coolpy7 啟動參數
# csk 集群服務同步驗證token,集群各節點轉發消息時驗證此口令,防止惡意入侵集群
# nid 集群節點名稱,必須集群中唯一
# mbs 連接集群其他節點,只需填其他節點信息,以半角豆號分隔多個節點信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node2 -mbs=192.168.1.100:7946,192.168.1.102:7946

# 啟動成功後會打印如下信息,即說明服務端已正常啟動,host於1883端口,請確保相關防火牆配置可用
2020/02/14 14:48:27 cluster on udp 192.168.1.101:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1/<code>

節點3:192.168.1.102節點設置

<code># 下載服務器端
sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/go_build_Coolpy7_go_linux.zip
# 解壓文件
unzip go_build_Coolpy7_go_linux.zip
# 提權
chmod -R 777 go_build_Coolpy7_go_linux
# 啟動Coolpy7 啟動參數
# csk 集群服務同步驗證token,集群各節點轉發消息時驗證此口令,防止惡意入侵集群
# nid 集群節點名稱,必須集群中唯一
# mbs 連接集群其他節點,只需填其他節點信息,以半角豆號分隔多個節點信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node3 -mbs=192.168.1.100:7946,192.168.1.101:7946

# 啟動成功後會打印如下信息,即說明服務端已正常啟動,host於1883端口,請確保相關防火牆配置可用
2020/02/14 14:48:27 cluster on udp 192.168.1.102:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1/<code>

至此集群搭建完畢,現在即可通過MQTT客戶端工具(MQTTLens)等進行相關集群功能測試。可從A節點連接的客戶端推送消息,然後B,C節點的客戶端如果訂閱了相同主題將會收到相關跨節點消息。

自動癒合,自動清除異常節點

集群自動恢復功能說明:

  1. 節點網絡異常離線各節點會發現ping包沒有響應,
  2. 隨後邀請其他在線節點向異常節點發起ping測試,
  3. 如經過三輪週期沒有得到異常節點響應
  4. 當前節點設置該節點為離線狀態
  5. 移出在線節點列表。
  6. 異常節點再次上線
  7. 所有在線節點收到狀態信號
  8. 所有節點設置該節點為在線
  9. 添加該節點到在線列表

防火牆設置

Coolpy7使用UDP協議進行集群節點狀態信號和消息同步通信,所以需要開始相關UDP端口防火牆

關於docker部署方式

最新版本docker鏡像已更新到latest標籤版本下,docker hub地址:https://hub.docker.com/r/coolpy7/coolpy7_core ,docker相關部署方式請參閱本手冊相關章節。Docker部署(Windows運行CP7)/kai-shi-shi-yong/docker-bu-shu-windows-yun-hang-cp7


分享到:


相關文章: