zookeeper動態添加/刪除集群中實例(zookeeper 3.6)


一,用來作為demo操作的zookeeper集群中的實例:

機器名:zk1
server.1=172.18.1.1:2888:3888

機器名:zk2
server.2=172.18.1.2:2888:3888

機器名:zk3
server.3=172.18.1.3:2888:3888

 

說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest

         對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/

說明:作者:劉宏締 郵箱: 371125307@qq.com

 

二,在zookeeper集群中動態添加實例

1,我們的目標:添加兩台實例:

機器名:zk4
server.4=172.18.1.4:2888:3888 

機器名:zk5
server.5=172.18.1.5:2888:3888

 

2,在兩台新機器上安裝zookeeper,

     使非集群相關的配置與之前的三台:zk1,zk2,zk3相一致

 

3,設置兩個容器中zookeeper的cluster配置,使加入集群

修改zoo.cfg,集群的配置為:(新加的兩台機器上相同)

[root@zk4 conf]# vi zoo.cfg 

集群配置的內容為:

#cluster
server.1=172.18.1.1:2888:3888
server.2=172.18.1.2:2888:3888
server.3=172.18.1.3:2888:3888
server.4=172.18.1.4:2888:3888
server.5=172.18.1.5:2888:3888

配置myid

[root@zk4 conf]# cd /data/zookeeper/data
[root@zk4 data]# vi myid

說明:

myid要區分開,

172.18.1.4上面,把myid設置為4

172.18.1.5上面,把myid設置為5

必須與zoo.cfg中的配置序號4、5保持一致

 

配置完成后,分別重啟兩個zookeeper服務:

zk4

[root@zk4 data]# systemctl stop zookeeper
[root@zk4 data]# systemctl start zookeeper

zk5

[root@zk5 data]# systemctl stop zookeeper
[root@zk5 data]# systemctl start zookeeper

 

4,查看效果

zk4

[root@zk4 data]# echo srvr | nc 127.0.0.1 2181
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 5

mode是follower,證明已加入集群

 

zk5:

[root@zk5 data]# echo srvr | nc 127.0.0.1 2181
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 5

兩個實例的mode都是follower

 

5,集群中原有的三台機器的處理:

zk1,zk2,zk3

以zk1為例:

修改集群的配置,使與新加入的機器zk4\zk5的配置一致:

[root@zk1 conf]# vi zoo.cfg

內容:

#cluster
server.1=172.18.1.1:2888:3888
server.2=172.18.1.2:2888:3888
server.3=172.18.1.3:2888:3888
server.4=172.18.1.4:2888:3888
server.5=172.18.1.5:2888:3888

重啟服務:

[root@zk1 conf]# systemctl stop zookeeper
[root@zk1 conf]# systemctl start zookeeper 

zk2/zk3上,依次進行相同的操作即可

 

說明:從leader實例上查詢follower的數量:

[root@zk4 data]# echo mntr | nc 127.0.0.1 2181 | grep follower
zk_synced_followers 4

 

說明:有4個follower

         這個數值是根據集群中的成員數量實時得到的,

         如果有實例宕掉,此數量會改變

 

三,zookeeper集群中動態刪除實例:

1,我們的目標:刪除兩台實例:

 

機器名:zk5
server.5=172.18.1.5:2888:3888

機器名:zk4
server.4=172.18.1.4:2888:3888

說明:這兩台里面zk4是leader,zk5是follower

 

說明:如果不關閉zk5/zk4,直接修改zk1/zk2/zk3的配置后重啟,會發生問題:

           以zk1為例:重啟后會因為集群中沒有leader,而導致zk1無法訪問.

 

2,操作步驟:

先關閉zk4和zk5

[root@zk4 conf]# systemctl stop zookeeper
[root@zk5 data]# systemctl stop zookeeper

說明:先關閉這兩台,這樣leader會自動從剩下的三台中選出,

可以避免因為沒有leader導致集群無法訪問的情況

 

再查看各個實例上的狀態

zk1:follower
zk2:follower
zk3:leader

 

再給zk1,zk2,zk3修改配置重啟

以zk1為例:

修改配置文件

[root@zk1 conf]# vi zoo.cfg

 

修改內容為:

#cluster
server.1=172.18.1.1:2888:3888
server.2=172.18.1.2:2888:3888
server.3=172.18.1.3:2888:3888
#server.4=172.18.1.4:2888:3888
#server.5=172.18.1.5:2888:3888

說明:注釋掉了4和5

 

重啟服務:

[root@zk1 conf]# systemctl stop zookeeper
[root@zk1 conf]# systemctl start zookeeper

 

查看狀態:

[root@zk1 conf]# echo stat | nc 127.0.0.1 2181 
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
Clients:
 /127.0.0.1:53110[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0.0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x700000000
Mode: follower
Node count: 10

訪問正常,mode還是follower

zk2/zk3上的操作與之相同

 

四,zookeeper cluster報錯信息:

 例:

[root@zk1 conf]# echo stat | nc 127.0.0.1 2181 
This ZooKeeper instance is not currently serving requests

報錯原因:集群里面沒有選出來leader,

 如果集群里的結點只剩下一台,或不足半數時,會給出這個錯誤提示

解決:

1,

檢查各節點:如果有誤關閉的或宕機的實例,重新啟動,保證其正常工作

2,

檢查防火牆,是否打開集群之間通信的2888/3888端口

如果這兩個端口被關閉,打開它

 

五,查看zookeeper的版本 

[root@zk1 ~]# echo stat|nc 127.0.0.1 2181
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM