在zookeeper集群中,會有三種角色,leader、 follower、 observer分別對應著**、議員、觀察者。
半數以上投票通過:可以這樣理解。客戶端的增刪改操作無論訪問到了哪台zookeeper伺服器,最終都會被**給leader伺服器,再由leader伺服器分給zookeeper集群中所有follower伺服器去投票(投票指的是在記憶體中做增刪改操作),半數投票通過就被認為操作可執行(commit),否則不可執行。
observer觀察者伺服器是針對於查詢操作做負載的,observer與follower伺服器最大的不同在於observer沒有投票權,在客戶端發起的增刪改操中,leader伺服器是不會把訊息傳遞給observer伺服器讓其投票的。但是查詢操作跟follower一樣,客戶端的查詢到了observer伺服器節點,observer伺服器去訪問leader伺服器取最新的資料然後返回給客戶端。
為什麼zookeeper集群是單數?
1、容錯
由於在增刪改操作中需要半數以上伺服器通過,來分析以下情況。
2臺伺服器,至少2臺正常執行才行(2的半數為1,半數以上最少為2),正常執行1臺伺服器都不允許掛掉
3臺伺服器,至少2臺正常執行才行(3的半數為1.5,半數以上最少為2),正常執行可以允許1臺伺服器掛掉
4臺伺服器,至少3臺正常執行才行(4的半數為2,半數以上最少為3),正常執行可以允許1臺伺服器掛掉
5臺伺服器,至少3臺正常執行才行(5的半數為2.5,半數以上最少為3),正常執行可以允許2臺伺服器掛掉
6臺伺服器,至少3臺正常執行才行(6的半數為3,半數以上最少為4),正常執行可以允許2臺伺服器掛掉
通過以上可以發現,3臺伺服器和4臺伺服器都最多允許1臺伺服器掛掉,5臺伺服器和6臺伺服器都最多允許2臺伺服器掛掉
但是明顯4臺伺服器成本高於3臺伺服器成本,6臺伺服器成本高於5伺服器成本。這是由於半數以上投票通過決定的。
三 ZooKeeper集群為什麼要單數?
在zookeeper集群中,會有三種角色,leader follower observer分別對應著 議員 觀察者。半數以上投票通過 可以這樣理解。客戶端的增刪改操作無論訪問到了哪台zookeeper伺服器,最終都會被 給leader伺服器,再由leader伺服器分給zookeeper集群中所有fo...
Zookeeper集群節點數量為什麼要奇數個
防腦裂 zookeeper的選舉策略也是需要半數以上的節點同意才能當選leader,如果是偶數節點可能導致票數相同的情況 在節點數量是奇數個的情況下,zookeeper集群總能對外提供服務 即使損失了一部分節點 如果節點數量是偶數個,會存在zookeeper集群不能用的可能性 腦裂成兩個均等的子集群...
zookeeper集群節點個數為什麼最好是2n 1
zookeeper集群一大特性是只要集群中半數以上的節點存活,集群就可以正常提供服務 第一點 防止單點故障 比如 集群中只有2臺伺服器,若其中1臺掛掉,集群則停止對外提供服務 集群中只有3臺伺服器,若其中1臺掛掉,集群則重新選主,繼續對外提供服務 第二點 2n 1臺和2n 2臺機器的容災能力相同,都...