Zookeeper的擴容和縮容
我的目的是用三台新的ZK服務器替換老的三台,所以采取先擴容再縮容的方式來進行。
擴容
環境描述
原有ZK服務器計算機名稱 | IP地址 | 角色 | myid |
Srv01 | 172.16.100.10 | Follower | 1 |
Srv02 | 172.16.100.20 | Follower | 2 |
Srv03 | 172.16.100.30 | Leader | 3 |
新加入ZK服務器計算機名稱 | IP地址 | 角色 | myid |
Srv04 | 172.16.100.40 | 無 | 101 |
Srv05 | 172.16.100.50 | 無 | 102 |
Srv06 | 172.16.100.60 | 無 | 103 |
以上三台的配置文件
步驟一:新ZK加入集群
老ZK服務器的配置文件暫時不變,然后修改2台新ZK服務器的配置文件,如下圖
修改好后啟動這2台新的ZK服務器。
我們明明准備了3台服務器,為什么要先啟動2台呢,因為目前有3台,而且老的配置文件不變,如果你啟動3台新的,在這種情況下新的機器無法加入集群,所以要先弄2台。你看上圖新機器的配置中最后那台是注釋的。2台啟動完成查看一下集群,之前100.30是Leader,現在我們依然查看30這台機器,發現它有4個follower,說明新加入的已經生效了。
步驟二:重啟原有的ZK服務器
修改原有3台ZK服務器的配置文件,然后重啟
三台重啟完成后新加入的100.50就變成了Leader因為它的myid最大
到此擴容完畢原來的3台規模的集群變成了5台,下面我就需要進行縮容。
縮容
步驟一:下線一台老的,上線一台新的
此時5台規模的集群允許失敗2台,所以我們下線一台。目的是讓3台新的都加入到集群中。
首先:關閉Srv01服務器的ZK服務。
其次:修改Srv02、Srv03、Srv04的配置文件如下,然后重啟
再次:上線Srv05,然后重啟
這時候Leader依然是Srv05服務器
之后一次修改Srv02、Srv03、Srv04服務器的配置文件,然后再次重啟,此時Srv05還是Leader。
完成之后修改Srv05然后進行重啟。這時候所有的ZK服務器配置文件都一樣,而且隨着Srv05重啟完成后將產生新的Leader,Srv06
步驟二:下線Srv02和Srv03
停止Srv02和Srv03,然修改Srv04和Srv05的配置文件,然后重啟
此時Follower變成2個
最后修改Srv06的配置文件然后進行重啟,重啟完成后Srv05就變成了Leader。
到此縮容完畢。
注意事項
- 遷移過程中始終要保證有ZK服務器可用
- 重啟原有ZK服務器的時候要注意查看新ZK服務器中的ZXID是否和原有的一致
- 重啟時要先重啟myid小的
- 如果有其他服務使用ZK,請在停止老集群前修改哪些服務的連接地址以便他們可以連接到新的ZK上。
其他運維建議
集群數量:3、5、7這樣的奇數。當然偶數也可以組成集群只是3台與4台組成的集群其實允許的故障數量是一樣的,所以4台組成的集群不划算。
多機房問題:如果每個機房之間的網絡狀況良好可以在每個機房都部署ZK服務器來組成一個大的Zookeeper集群。首先確定你的集群規模比如是N台。然后分別計算每個機房的點數。第一個機房N1=(n-1)/2 ,第二個機房N2的取值范圍是 1~(N-N1)/2,第三個機房N3就是N-N1-N2。
如果是雙機房可以在一個主要機房部署多台,在一個次要機房部署少量ZK服務器。原則就是保證主要機房的ZK服務器數量多於次要機房。
擴容:通常都是水平擴容也就是向集群中添加機器,但是在Zookeeper集群中你添加機器就需要重啟整個集群,這個要注意。不要一起重啟而是逐個從myid最小的開始重啟,有小到大。
默認情況下ZK不會清理快照和日志文件,你可以寫一個腳本來手動刪除。或者使用自帶zkCleanup.sh來清理,當然也可以配置自動清理。