[VerneMQ]_建立VerneMQ叢集(Cluster)

今天來測試VerneMQ叢集的功能,從官方的文件整理簡潔的步驟

https://vernemq.com/docs/clustering/

https://vernemq.com/docs/clustering/communication.html

 

我這次測試只有兩個Node,一個是RPI3一個是VM內的UBUNTU 14.04

 

1.首先提到必須於vernemq.conf中,將nodename改掉,預設大家都是[email protected],請你換一個名子,或者確保沒有其他Node跟這個名子一致

於是我改了UBUNTU 14.04,變成[email protected]

以及RPI上,變成[email protected]

 

2.然後你必須要設定這些NODE的vernemq.conf,

listener.vmq.clustering = 0.0.0.0:44053要改為listener.vmq.clustering = 你node自己的ip位置:44053

而這個PORT官方也有提到每台機器可以不一樣,因為會自動PROBE

設定好後,重新啟動verneMQ

 

3.接著就是加入Cluster,這個指令相當酷,在Cluster中你不需要指定哪一台當作master因此只要你輸入其他nodename即可,而且只要有其中一台node做就可以

例如我RPI上面輸入:

vmq-admin cluster join [email protected]

 

代表跟UBUNTU 14.04一起加入CLUSTER,如果成功的話,會顯示一個done

 

這時你在雙方機器上輸入 sudo vmq-admin cluster status

ntl@ubuntu:~$ sudo vmq-admin cluster status
+--------------------+-------+
| Node |Running|
+--------------------+-------+
| [email protected] | true |
|[email protected]| true |
+--------------------+-------+

 

都可以看到目前Cluster的狀態

 

若要UBUNTU這個NODE離開Cluster,則:

vmq-admin cluster leave [email protected]

 

這個指令要NODE自己下或者在Cluster內的其他NODE下都可以,但需要注意的是官方有說到,下此指令之後不會馬上離開

因為上面還會等待預設1分鐘的grace period讓subscriber能夠轉移以及migrate topic Queue至其他的Node

 

因此若要強制關閉所有subscriber連線,則:

vmq-admin cluster leave node=<NodeThatShouldGo> -k

 

其中離開cluster的指令事實上做了相當多的事情,讓現存的subscriber以及topic Queue能夠安全的轉移,可以參考官方文件會比較詳細一些

 

若都加入完成,就會自動地同步所有NODE之間的Topic,並能夠讓進入A NODE的PUB,由B NODE訂閱相同TOPIC的SUB傳出來。

 

你也可以在任一節點訂閱在CLUSTER其他任一節點的狀態,例如可以在RPI上訂閱UBUNTU的$SYS狀態

mosquitto_sub -t “\$SYS/[email protected]/#” -d

 

而若其中node斷線時:

ntl@ubuntu:~$ sudo vmq-admin cluster status
+--------------------+-------+
| Node |Running|
+--------------------+-------+
|[email protected]| true |
|[email protected]| false |
+--------------------+-------+

且在該段線的NODE恢復之後verneMQ重新啟動則會自動加回cluster,不須再手動去下join指令!

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料