Zookeeper集群角色分配原理
ZK內(nèi)部存在Leader和Follower兩個(gè)角色,那么這兩種角色是怎樣劃分呢?或者說(shuō)是怎么樣被選舉出來(lái)呢?以下將詳細(xì)介紹ZK內(nèi)部的選舉機(jī)制。
ZK是通過(guò)內(nèi)部的選舉算法來(lái)選出Leader。(服務(wù)器需要配置對(duì)應(yīng)的ID和文件)如下圖所示:
第一種情況:集群是全新的集群。
以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明整個(gè)選舉的過(guò)程.
假設(shè)有五臺(tái)服務(wù)器組成的zookeeper集群,它們的id從1-5,同時(shí)它們都是最新啟動(dòng)的,也就是沒(méi)有歷史數(shù)據(jù),在存放數(shù)據(jù)量這一點(diǎn)上,都是一樣的.假設(shè)這些服務(wù)器依序啟動(dòng),來(lái)看看會(huì)發(fā)生什么:
1) 服務(wù)器1啟動(dòng),此時(shí)只有它一臺(tái)服務(wù)器啟動(dòng)了,它發(fā)出去的報(bào)沒(méi)有任何響應(yīng),所以它的選舉狀態(tài)一直是LOOKING狀態(tài)
2) 服務(wù)器2啟動(dòng),它與最開(kāi)始啟動(dòng)的服務(wù)器1進(jìn)行通信,互相交換自己的選舉結(jié)果,由于兩者都沒(méi)有歷史數(shù)據(jù),所以id值較大的服務(wù)器2勝出,但是由于沒(méi)有達(dá)到超過(guò)半數(shù)以上的服務(wù)器都同意選舉它(這個(gè)例子中的半數(shù)以上是3),所以服務(wù)器1,2還是繼續(xù)保持LOOKING狀態(tài).
3) 服務(wù)器3啟動(dòng),根據(jù)前面的理論分析,服務(wù)器3成為服務(wù)器1,2,3中的老大,而與上面不同的是,此時(shí)有三臺(tái)服務(wù)器選舉了它,所以它成為了這次選舉的leader.
4) 服務(wù)器4啟動(dòng),根據(jù)前面的分析,理論上服務(wù)器4應(yīng)該是服務(wù)器1,2,3,4中最大的,但是由于前面已經(jīng)有半數(shù)以上的服務(wù)器選舉了服務(wù)器3,所以它只能接收當(dāng)小弟的命了.
5) 服務(wù)器5啟動(dòng),同4一樣,當(dāng)小弟.
第二種情況:非全新集群的選舉機(jī)制(數(shù)據(jù)恢復(fù))
那么,初始化的時(shí)候,是按照上述的說(shuō)明進(jìn)行選舉的,但是當(dāng)zookeeper運(yùn)行了一段時(shí)間之后,有機(jī)器down掉,重新選舉時(shí),選舉過(guò)程就相對(duì)復(fù)雜了。
需要加入數(shù)據(jù)id、leader id和邏輯時(shí)鐘。
數(shù)據(jù)id:數(shù)據(jù)新的id就大,數(shù)據(jù)每次更新都會(huì)更新id。
Leader id:就是我們配置的myid中的值,每個(gè)機(jī)器一個(gè)。
邏輯時(shí)鐘:這個(gè)值從0開(kāi)始遞增,每次選舉對(duì)應(yīng)一個(gè)值,也就是說(shuō): 如果在同一次選舉中,那么這個(gè)值應(yīng)該是一致的 ; 邏輯時(shí)鐘值越大,說(shuō)明這一次選舉leader的進(jìn)程更新.
選舉的標(biāo)準(zhǔn)就變成:
1、邏輯時(shí)鐘小的選舉結(jié)果被忽略,重新投票
2、統(tǒng)一邏輯時(shí)鐘后,數(shù)據(jù)id大的勝出
3、數(shù)據(jù)id相同的情況下,leader id大的勝出
根據(jù)這個(gè)規(guī)則選出leader。
總結(jié)
以上是生活随笔為你收集整理的Zookeeper集群角色分配原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 三星v版系统更新无法连接到服务器,美国V
- 下一篇: 书籍分享——《创新者的窘境》