溫馨提示×

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

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

大數(shù)據(jù)生態(tài)之zookeeper(原理)

發(fā)布時(shí)間:2020-07-13 10:54:48 來源:網(wǎng)絡(luò) 閱讀:262 作者:原生zzy 欄目:大數(shù)據(jù)

1.  集群的角色描述:

大數(shù)據(jù)生態(tài)之zookeeper(原理)

角色

描述

領(lǐng)導(dǎo)者(leader)

領(lǐng)導(dǎo)者負(fù)責(zé)進(jìn)行公布決議,主要處理寫請(qǐng)求

跟隨者(follower)

Follower用于接收客戶端請(qǐng)求并向客戶端返回結(jié)果(只能處理讀請(qǐng)求,如果接收到寫請(qǐng)求,
將寫請(qǐng)求轉(zhuǎn)發(fā)給leader),當(dāng)leader宕機(jī)時(shí),發(fā)起選主,有投票和被投票權(quán)

觀察者(observer)

Observer可以接收客戶端連接,將寫請(qǐng)求轉(zhuǎn)發(fā)給leader節(jié)點(diǎn),幫助follower減輕讀的壓力
但Observer不參加選舉和被選舉。Observer的目錄是為了擴(kuò)展系統(tǒng),提高讀取速度

客戶端

請(qǐng)求發(fā)起方

 

2. zookeeper的選主過程

(1)全新集群的選主:

             根據(jù)啟動(dòng)的順序和id進(jìn)行選主(過半機(jī)制:集群中超過半數(shù)的集群可使用時(shí),才開始選主)

             以hadoop01(id=1)—hadoop02(id=2)---hadoop03(id=3)----hadoop04(id=r)----hadoop05(id=5)為例:

  • 當(dāng)hadoop01啟動(dòng)時(shí),此時(shí)只有它一臺(tái)服務(wù)器,,他發(fā)出取的報(bào)告沒有任何相應(yīng),所有它的選舉一直是looking狀態(tài)。

  • Hadoop02啟動(dòng):它與最開始啟動(dòng)的hadoop01進(jìn)行通信,相互交換自己的選舉結(jié)果,由于兩者都沒有歷史數(shù)據(jù),所以id值較大的服務(wù)器勝出,但是由于沒有達(dá)到超過半數(shù)以上的服務(wù)器同意選舉它(這個(gè)例子中的半數(shù)以上是 3),所有hadoop01、hadoop02還是繼續(xù)保持looking狀態(tài)。

  • Hadoop03啟動(dòng),根據(jù)前面的分析,服務(wù)器 3 成為服務(wù)器 1,2,3 中的老大,而與上面不 同的是,此時(shí)有三臺(tái)服務(wù)器(超過半數(shù))選舉了它,所Hadoop03它成為了這次選舉的 leader

  • 服hadoop04啟動(dòng),根據(jù)上面的分析,理論上,hadoop04應(yīng)該是服務(wù)器中id最大的,但是由前面已近有超過半數(shù)的服務(wù)器選舉了hadoop03,所以hadoop04只能是follower

  • Hadoop05啟動(dòng),與hadoop04一樣,也是follower

          zookeeper server的三種工作狀態(tài):

    • LOOKING:當(dāng)前 Server 不知道 leader 是誰,正在搜尋,正在選舉

    • LEADING:當(dāng)前 Server 即為選舉出來的 leader,負(fù)責(zé)協(xié)調(diào)事務(wù)

    • FOLLOWING:leader 已經(jīng)選舉出來,當(dāng)前 Server 與之同步,服從 leader 的命令


(2)非全新集群的選主

         leader 已經(jīng)選舉出來,當(dāng)前 Server 與之同步,服從 leader 的命令,但是由于某種原因主節(jié)點(diǎn)宕機(jī):

         此時(shí)我們根據(jù)三個(gè)維度來選主:數(shù)據(jù)version、serverid、邏輯時(shí)鐘。

  • 數(shù)據(jù)version:數(shù)據(jù)新的version就大,數(shù)據(jù)每次更新,同時(shí)會(huì)更新它的version

  • Serverid:就是我們配置的 myid 中的值,每個(gè)機(jī)器一個(gè)

  • 邏輯時(shí)鐘:這個(gè)值從0開始,每一次選舉對(duì)應(yīng)一個(gè)值,也就是說,如果在同一次選舉中,這個(gè)值應(yīng)該一致,邏輯時(shí)鐘越大,說明這一次選舉leader人的進(jìn)程更新,也就是每次選舉擁有一個(gè) zxid,投票結(jié)果只取 zxid 最新的

        選舉的標(biāo)準(zhǔn):

  • 邏輯時(shí)鐘小的選舉結(jié)果被忽略,重新投票

  • 統(tǒng)一邏輯時(shí)鐘后數(shù)據(jù)version大的勝出

  • 邏輯時(shí)鐘統(tǒng)一,version也相同,,server id 大的勝出。

       根據(jù)以上的規(guī)則,快速選出集群的主節(jié)點(diǎn)。

 

3. zookeeper寫數(shù)據(jù)的流程:

  • 客戶端發(fā)送寫入數(shù)據(jù)的請(qǐng)求,這個(gè)請(qǐng)求最終會(huì)被leader處理

  • leader會(huì)先寫入數(shù)據(jù),寫入完成之后通知follower進(jìn)行數(shù)據(jù)的同步

  • follower就會(huì)開始進(jìn)行數(shù)據(jù)的同步(并行,多臺(tái)follower并行同步)

  • 每一個(gè)follower只要數(shù)據(jù)同步完成就會(huì)向leader發(fā)送數(shù)據(jù)同步成功信息

  • leader接收到超過半數(shù)以上的成功信息后,則認(rèn)為這次寫數(shù)據(jù)成功

  • 其他節(jié)點(diǎn)慢慢進(jìn)行同步,在數(shù)據(jù)同步的過程中,不對(duì)外提供讀寫服務(wù)

 

4. zookeeper的數(shù)據(jù)的同步過程

  • follower連接leader并發(fā)送自己最大的zixd

  • leader進(jìn)行對(duì)比,將自己最大的zxid和follower發(fā)送過來的zxid進(jìn)行對(duì)比,如果leader的zxid大于follower的,則通知follower進(jìn)行數(shù)據(jù)同步

  • follower發(fā)送數(shù)據(jù)同步請(qǐng)求

  • leader確定當(dāng)前的follower的數(shù)據(jù)同步點(diǎn)(從follower最大的zxid到leader最大的zxid之間數(shù)據(jù)需要同步)

  • follower開始同步數(shù)據(jù),這個(gè)過程不對(duì)外提供讀寫服務(wù)。

  • follower同步完成,發(fā)送消息給leader

  • leader就會(huì)修改當(dāng)前的follower的狀態(tài)為update,這個(gè)時(shí)候follower就可以接受客戶端的讀寫請(qǐng)求,但是只能讀,如果是寫入請(qǐng)求,需要轉(zhuǎn)發(fā)給leader

 

5. ZooKeeper 中各個(gè)角色的工作職責(zé)

   (1)Leader

  • 恢復(fù)數(shù)據(jù)

  • 維持與follower的心跳,接收follower請(qǐng)求并判斷follower的請(qǐng)求消息類型

  • 根據(jù)不同的消息類型,進(jìn)行不同的處理

    (2)follower

  • 向leader發(fā)送請(qǐng)求(同步數(shù)據(jù),寫入請(qǐng)求)

  • 接收leader的消息并進(jìn)行相應(yīng)的處理

  • 接收client的讀寫請(qǐng)求,如果是寫入的請(qǐng)求轉(zhuǎn)發(fā)給leader處理

  • 返回client的讀請(qǐng)求,查詢的結(jié)果      

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

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

AI