溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Zookeeper選取機制的示例分析

發(fā)布時間:2022-02-19 13:48:00 來源:億速云 閱讀:142 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Zookeeper選取機制的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Zookeeper 是一個分布式服務(wù)框架,主要是用來解決分布式應(yīng)用中遇到的一些數(shù)據(jù)管理問題如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項的管理等。我們可以簡單把 Zookeeper 理解為分布式家庭的大管家,那么管家團隊是如何選出Leader的呢?

Zookeeper選取機制的示例分析

zookeeper節(jié)點的4種狀態(tài):

LEADING:說明此節(jié)點已經(jīng)是leader節(jié)點,處于領(lǐng)導(dǎo)者地位的狀態(tài),差不多就是一般集群中的master。但在zookeeper中,只有l(wèi)eader才有寫權(quán)限,其他節(jié)點(FOLLOWING)是沒有寫權(quán)限的,可以讀

LOOKING:選舉中,正在尋找leader,即將進入leader選舉流程中

FOLLOWING:跟隨者,表示當(dāng)前集群中的leader已經(jīng)選舉出來了,主要具備以下幾個功能點

向leader發(fā)送請求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息)

接收leader消息并進行處理;

接收client發(fā)送過來的請求,如果為寫請求,會發(fā)送給Leader進行投票處理,然后返回client結(jié)果。

OBSERVING:OBSERVING和FOLLOWING差不多,但不參加投票和選舉,接受leader選舉后的結(jié)果

選舉過程:

假如有以下5臺機器server1、server2、server3、server4、server5 圖是網(wǎng)上扒的

Zookeeper選取機制的示例分析
img

每個server 自身都有一票,在初始化或者server崩潰數(shù)過半的時候,每個server都有一個自身的myid(zookeeper配置文件),這里按1、2、3、4、5算

在選舉過程中主要是依據(jù)zxid和myid來進行輪訓(xùn)server然后比較統(tǒng)計投票

zxid (ZooKeeper Transaction Id,每次請求對應(yīng)一個唯一的zxid,如果zxid a

選舉分為兩種情況,初始化和leader掛掉的時候,要進行l(wèi)eader選舉,至少需要2臺機器,集群機器臺數(shù)基本是奇數(shù)

初始化

當(dāng)啟動初始化集群的時候,server1的myid為1,zxid為0 server2的myid為2,zxid同樣是0,以此類推。此種情況下zxid都是為0。先比較zxid,再比較myid

  • 服務(wù)器1啟動,給自己投票,然后發(fā)投票信息,由于其它機器還沒有啟動所以它收不到反饋信息,服務(wù)器1的狀態(tài)一直屬于Looking(選舉狀態(tài))。
  • 服務(wù)器2啟動,給自己投票,同時與之前啟動的服務(wù)器1交換結(jié)果,由于服務(wù)器2的myid大所以服務(wù)器2勝出,但此時投票數(shù)沒有大于半數(shù),所以兩個服務(wù)器的狀態(tài)依然是LOOKING。
  • 服務(wù)器3啟動,給自己投票,同時與之前啟動的服務(wù)器1,2交換信息,由于服務(wù)器3的myid最大所以服務(wù)器3勝出,此時投票數(shù)正好大于半數(shù),所以服務(wù)器3成為領(lǐng)導(dǎo)者,服務(wù)器1,2成為小弟。
  • 服務(wù)器4啟動,給自己投票,同時與之前啟動的服務(wù)器1,2,3交換信息,盡管服務(wù)器4的myid大,但之前服務(wù)器3已經(jīng)勝出,所以服務(wù)器4只能成為小弟。
  • 服務(wù)器5啟動,后面的邏輯同服務(wù)器4成為小弟

當(dāng)選舉機器過半的時候,已經(jīng)選舉出leader后,后面的就跟隨已經(jīng)選出的leader,所以4和5跟隨成為leader的server3

所以,在初始化的時候,一般到過半的機器數(shù)的時候誰的myid最大一般就是leader

運行期間

按照上述初始化的情況,server3成為了leader,在運行期間處于leader的server3掛了,那么非Observer服務(wù)器server1、server2、server4、server5會將自己的節(jié)點狀態(tài)變?yōu)長OOKING狀態(tài)

1、開始進行l(wèi)eader選舉?,F(xiàn)在選舉同樣是根據(jù)myid和zxid來進行

2、首先每個server都會給自己投一票競選leader。假設(shè)server1的zxid為123,server2的zxid為124,server4的zxid為169,server5的zxid為188

3、同樣先是比較zxid再比較,server1、server2、server4比較server4根據(jù)優(yōu)先條件選舉為leader。然后server5還是跟隨server4,即使server5的zxid最大,但是當(dāng)選舉到server4的時候,機器數(shù)已經(jīng)過半。不再進行選舉,跟隨已經(jīng)選舉的leader

zookeeper集群為保證數(shù)據(jù)的一致性所有的操作都是由leader完成,之后再由leader同步給follower。重點就在這兒,zookeeper并不會確保所有節(jié)點都同步完數(shù)據(jù),只要有大多數(shù)節(jié)點(即n/2+1)同步成功即可。

咱們假設(shè)有一個寫操作成功那么現(xiàn)在數(shù)據(jù)只存在于節(jié)點leader,之后leader再同步給其他follower。這時候宕掉3個機器,已經(jīng)過半的機器無法進行投票選舉,剩余2臺不足過半,無法選舉=無法提供任何服務(wù)。再啟動一個機器恢復(fù)服務(wù)。所以宕掉的機器不要過半,過半就會導(dǎo)致無法正常服務(wù)。

在leader選舉的時候會有30s-120s的過程,在這期間也是無法提供服務(wù)的。如果用zookeeper要作為服務(wù)發(fā)現(xiàn)是個弊端,基本無法忍受,zookeeper本身是一個CP系統(tǒng),保證數(shù)據(jù)的一致性,在恢復(fù)的時候再提供服務(wù),并沒有多好高可用的方案。如果leader發(fā)生故障選舉時無法提供服務(wù)發(fā)現(xiàn)對一個大型應(yīng)用來說可能是致命的。它可以為同在一個分布式系統(tǒng)中的其他服務(wù)提供:統(tǒng)一命名服務(wù)、配置管理、分布式鎖服務(wù)、集群管理等功能)是個偉大的開源項目,很成熟

以上是“Zookeeper選取機制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI