您好,登錄后才能下訂單哦!
這篇文章給大家介紹為什么Zookeeper集群節(jié)點(diǎn)數(shù)量要是奇數(shù)個(gè),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
為什么Zookeeper集群節(jié)點(diǎn)數(shù)量要是奇數(shù)個(gè)?大家在工作中,用到的Zookeeper集群的節(jié)點(diǎn)個(gè)數(shù)都是奇數(shù)個(gè)。至于為什么要是奇數(shù)個(gè),可能都知道是為了滿足選舉需要,并不知道詳細(xì)的原因。本文主要說下原因和原理,以免在面試過程中被Pass。
首先需要明確zookeeper選舉的規(guī)則:leader選舉,要求 可用節(jié)點(diǎn)數(shù)量 > 總節(jié)點(diǎn)數(shù)量/2 。注意 是 > , 不是 ≥。
注:為什么規(guī)則要求 可用節(jié)點(diǎn)數(shù)量 > 集群總節(jié)點(diǎn)數(shù)量/2 ? 如果不這樣限制,在集群出現(xiàn)腦裂的時(shí)候,可能會(huì)出現(xiàn)多個(gè)子集群同時(shí)服務(wù)的情況(即子集群各組選舉出自己的leader), 這樣對整個(gè)zookeeper集群來說是紊亂的。換句話說,如果遵守上述規(guī)則進(jìn)行選舉,即使出現(xiàn)腦裂,集群最多也只能出現(xiàn)一個(gè)子集群可以提供服務(wù)的情況(能滿足節(jié)點(diǎn)數(shù)量> 總結(jié)點(diǎn)數(shù)量/2 的子集群最多只會(huì)有一個(gè))。所以要限制 可用節(jié)點(diǎn)數(shù)量 > 集群總節(jié)點(diǎn)數(shù)量/2 。
采用奇數(shù)個(gè)的節(jié)點(diǎn)主要是出于兩方面的考慮:
1、防止由腦裂造成的集群不可用。
首先,什么是腦裂?集群的腦裂通常是發(fā)生在節(jié)點(diǎn)之間通信不可達(dá)的情況下,集群會(huì)分裂成不同的小集群,小集群各自選出自己的master節(jié)點(diǎn),導(dǎo)致原有的集群出現(xiàn)多個(gè)master節(jié)點(diǎn)的情況,這就是腦裂。
下面舉例說一下為什么采用奇數(shù)臺節(jié)點(diǎn),就可以防止由于腦裂造成的服務(wù)不可用:
(1) 假如zookeeper集群有 5 個(gè)節(jié)點(diǎn),發(fā)生了腦裂,腦裂成了A、B兩個(gè)小集群:
(a) A :1個(gè)節(jié)點(diǎn) ,B :4個(gè)節(jié)點(diǎn)
(b) A :2個(gè)節(jié)點(diǎn), B :3個(gè)節(jié)點(diǎn)
可以看出,上面這兩種情況下,A、B中總會(huì)有一個(gè)小集群滿足 可用節(jié)點(diǎn)數(shù)量 > 總節(jié)點(diǎn)數(shù)量/2 。所以zookeeper集群仍然能夠選舉出leader , 仍然能對外提供服務(wù),只不過是有一部分節(jié)點(diǎn)失效了而已。
(2) 假如zookeeper集群有4個(gè)節(jié)點(diǎn),同樣發(fā)生腦裂,腦裂成了A、B兩個(gè)小集群:
(a) A:1個(gè)節(jié)點(diǎn) , B:3個(gè)節(jié)點(diǎn)
(b) A:2個(gè)節(jié)點(diǎn) , B:2個(gè)節(jié)點(diǎn)
可以看出,情況(a) 是滿足選舉條件的,與(1)中的例子相同。但是情況(b) 就不同了,因?yàn)锳和B都是2個(gè)節(jié)點(diǎn),都不滿足 可用節(jié)點(diǎn)數(shù)量 > 總節(jié)點(diǎn)數(shù)量/2 的選舉條件, 所以此時(shí)zookeeper就徹底不能提供服務(wù)了。
綜合上面兩個(gè)例子可以看出:在節(jié)點(diǎn)數(shù)量是奇數(shù)個(gè)的情況下, zookeeper集群總能對外提供服務(wù)(即使損失了一部分節(jié)點(diǎn));如果節(jié)點(diǎn)數(shù)量是偶數(shù)個(gè),會(huì)存在zookeeper集群不能用的可能性(腦裂成兩個(gè)均等的子集群的時(shí)候)。
在生產(chǎn)環(huán)境中,如果zookeeper集群不能提供服務(wù),那將是致命的 , 所以zookeeper集群的節(jié)點(diǎn)數(shù)一般采用奇數(shù)個(gè)。
2、在容錯(cuò)能力相同的情況下,奇數(shù)臺更節(jié)省資源。
leader選舉,要求 可用節(jié)點(diǎn)數(shù)量 > 總節(jié)點(diǎn)數(shù)量/2 。注意 是 > , 不是 ≥。
舉兩個(gè)例子:
(1) 假如zookeeper集群1 ,有3個(gè)節(jié)點(diǎn),3/2=1.5 , 即zookeeper想要正常對外提供服務(wù)(即leader選舉成功),至少需要2個(gè)節(jié)點(diǎn)是正常的。換句話說,3個(gè)節(jié)點(diǎn)的zookeeper集群,允許有一個(gè)節(jié)點(diǎn)宕機(jī)。
(2) 假如zookeeper集群2,有4個(gè)節(jié)點(diǎn),4/2=2 , 即zookeeper想要正常對外提供服務(wù)(即leader選舉成功),至少需要3個(gè)節(jié)點(diǎn)是正常的。換句話說,4個(gè)節(jié)點(diǎn)的zookeeper集群,也允許有一個(gè)節(jié)點(diǎn)宕機(jī)。
那么問題就來了, 集群1與集群2都有 允許1個(gè)節(jié)點(diǎn)宕機(jī) 的容錯(cuò)能力,但是集群2比集群1多了1個(gè)節(jié)點(diǎn)。在相同容錯(cuò)能力的情況下,本著節(jié)約資源的原則,zookeeper集群的節(jié)點(diǎn)數(shù)維持奇數(shù)個(gè)更好一些。
關(guān)于為什么Zookeeper集群節(jié)點(diǎn)數(shù)量要是奇數(shù)個(gè)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。