新聞中心
Zookeeper 是一個(gè)分布式服務(wù)框架,主要是用來(lái)解決分布式應(yīng)用中遇到的一些數(shù)據(jù)管理問(wèn)題如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等。我們可以簡(jiǎn)單把 Zookeeper 理解為分布式家庭的大管家,那么管家團(tuán)隊(duì)是如何選出Leader的呢?下面為大家詳細(xì)講解一下Zookeeper選取機(jī)制。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),湯旺企業(yè)網(wǎng)站建設(shè),湯旺品牌網(wǎng)站建設(shè),網(wǎng)站定制,湯旺網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,湯旺網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
zookeeper節(jié)點(diǎn)的4種狀態(tài):
LEADING:說(shuō)明此節(jié)點(diǎn)已經(jīng)是leader節(jié)點(diǎn),處于領(lǐng)導(dǎo)者地位的狀態(tài),差不多就是一般集群中的master。但在zookeeper中,只有l(wèi)eader才有寫權(quán)限,其他節(jié)點(diǎn)(FOLLOWING)是沒(méi)有寫權(quán)限的,可以讀
LOOKING:選舉中,正在尋找leader,即將進(jìn)入leader選舉流程中
FOLLOWING:跟隨者,表示當(dāng)前集群中的leader已經(jīng)選舉出來(lái)了,主要具備以下幾個(gè)功能點(diǎn)
? 向leader發(fā)送請(qǐng)求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息)
? 接收l(shuí)eader消息并進(jìn)行處理;
? 接收client發(fā)送過(guò)來(lái)的請(qǐng)求,如果為寫請(qǐng)求,會(huì)發(fā)送給Leader進(jìn)行投票處理,然后返回client結(jié)果。
OBSERVING:OBSERVING和FOLLOWING差不多,但不參加投票和選舉,接受leader選舉后的結(jié)果
選舉過(guò)程:
假如有以下5臺(tái)機(jī)器server1、server2、server3、server4、server5 圖是網(wǎng)上扒的
img
每個(gè)server 自身都有一票,在初始化或者server崩潰數(shù)過(guò)半的時(shí)候,每個(gè)server都有一個(gè)自身的myid(zookeeper配置文件),這里按1、2、3、4、5算
在選舉過(guò)程中主要是依據(jù)zxid和myid來(lái)進(jìn)行輪訓(xùn)server然后比較統(tǒng)計(jì)投票
zxid (ZooKeeper Transaction Id,每次請(qǐng)求對(duì)應(yīng)一個(gè)唯一的zxid,如果zxid a
選舉分為兩種情況,初始化和leader掛掉的時(shí)候,要進(jìn)行l(wèi)eader選舉,至少需要2臺(tái)機(jī)器,集群機(jī)器臺(tái)數(shù)基本是奇數(shù)
初始化
當(dāng)啟動(dòng)初始化集群的時(shí)候,server1的myid為1,zxid為0 server2的myid為2,zxid同樣是0,以此類推。此種情況下zxid都是為0。先比較zxid,再比較myid
-
服務(wù)器1啟動(dòng),給自己投票,然后發(fā)投票信息,由于其它機(jī)器還沒(méi)有啟動(dòng)所以它收不到反饋信息,服務(wù)器1的狀態(tài)一直屬于Looking(選舉狀態(tài))。
-
服務(wù)器2啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1交換結(jié)果,由于服務(wù)器2的myid大所以服務(wù)器2勝出,但此時(shí)投票數(shù)沒(méi)有大于半數(shù),所以兩個(gè)服務(wù)器的狀態(tài)依然是LOOKING。
-
服務(wù)器3啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1,2交換信息,由于服務(wù)器3的myid最大所以服務(wù)器3勝出,此時(shí)投票數(shù)正好大于半數(shù),所以服務(wù)器3成為領(lǐng)導(dǎo)者,服務(wù)器1,2成為小弟。
-
服務(wù)器4啟動(dòng),給自己投票,同時(shí)與之前啟動(dòng)的服務(wù)器1,2,3交換信息,盡管服務(wù)器4的myid大,但之前服務(wù)器3已經(jīng)勝出,所以服務(wù)器4只能成為小弟。
-
服務(wù)器5啟動(dòng),后面的邏輯同服務(wù)器4成為小弟
當(dāng)選舉機(jī)器過(guò)半的時(shí)候,已經(jīng)選舉出leader后,后面的就跟隨已經(jīng)選出的leader,所以4和5跟隨成為leader的server3
所以,在初始化的時(shí)候,一般到過(guò)半的機(jī)器數(shù)的時(shí)候誰(shuí)的myid最大一般就是leader
運(yùn)行期間
按照上述初始化的情況,server3成為了leader,在運(yùn)行期間處于leader的server3掛了,那么非Observer服務(wù)器server1、server2、server4、server5會(huì)將自己的節(jié)點(diǎn)狀態(tài)變?yōu)長(zhǎng)OOKING狀態(tài)
1、開始進(jìn)行l(wèi)eader選舉?,F(xiàn)在選舉同樣是根據(jù)myid和zxid來(lái)進(jìn)行
2、首先每個(gè)server都會(huì)給自己投一票競(jìng)選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ī)器數(shù)已經(jīng)過(guò)半。不再進(jìn)行選舉,跟隨已經(jīng)選舉的leader
zookeeper集群為保證數(shù)據(jù)的一致性所有的操作都是由leader完成,之后再由leader同步給follower。重點(diǎn)就在這兒,zookeeper并不會(huì)確保所有節(jié)點(diǎn)都同步完數(shù)據(jù),只要有大多數(shù)節(jié)點(diǎn)(即n/2+1)同步成功即可。
咱們假設(shè)有一個(gè)寫操作成功那么現(xiàn)在數(shù)據(jù)只存在于節(jié)點(diǎn)leader,之后leader再同步給其他follower。這時(shí)候宕掉3個(gè)機(jī)器,已經(jīng)過(guò)半的機(jī)器無(wú)法進(jìn)行投票選舉,剩余2臺(tái)不足過(guò)半,無(wú)法選舉=無(wú)法提供任何服務(wù)。再啟動(dòng)一個(gè)機(jī)器恢復(fù)服務(wù)。所以宕掉的機(jī)器不要過(guò)半,過(guò)半就會(huì)導(dǎo)致無(wú)法正常服務(wù)。
在leader選舉的時(shí)候會(huì)有30s-120s的過(guò)程,在這期間也是無(wú)法提供服務(wù)的。如果用zookeeper要作為服務(wù)發(fā)現(xiàn)是個(gè)弊端,基本無(wú)法忍受,zookeeper本身是一個(gè)CP系統(tǒng),保證數(shù)據(jù)的一致性,在恢復(fù)的時(shí)候再提供服務(wù),并沒(méi)有多好高可用的方案。如果leader發(fā)生故障選舉時(shí)無(wú)法提供服務(wù)發(fā)現(xiàn)對(duì)一個(gè)大型應(yīng)用來(lái)說(shuō)可能是致命的。它可以為同在一個(gè)分布式系統(tǒng)中的其他服務(wù)提供:統(tǒng)一命名服務(wù)、配置管理、分布式鎖服務(wù)、集群管理等功能)是個(gè)偉大的開源項(xiàng)目,很成熟
網(wǎng)站欄目:詳解Zookeeper選取機(jī)制
當(dāng)前網(wǎng)址:http://m.fisionsoft.com.cn/article/cocshis.html


咨詢
建站咨詢
