大數(shù)據(jù)生態(tài)之zookeeper(原理)-創(chuàng)新互聯(lián)

1. 集群的角色描述:

目前創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設、域名、虛擬空間、綿陽服務器托管、企業(yè)網(wǎng)站設計、平湖網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

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

角色

描述

領導者(leader)

領導者負責進行公布決議,主要處理寫請求

跟隨者(follower)

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

觀察者(observer)

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

客戶端

請求發(fā)起方

2. zookeeper的選主過程

(1)全新集群的選主:

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

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

  • 當hadoop01啟動時,此時只有它一臺服務器,,他發(fā)出取的報告沒有任何相應,所有它的選舉一直是looking狀態(tài)。

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

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

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

  • Hadoop05啟動,與hadoop04一樣,也是follower

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

    • LOOKING:當前 Server 不知道 leader 是誰,正在搜尋,正在選舉

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

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

(2)非全新集群的選主

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

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

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

  • Serverid:就是我們配置的 myid 中的值,每個機器一個

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

       選舉的標準:

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

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

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

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

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

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

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

  • follower就會開始進行數(shù)據(jù)的同步(并行,多臺follower并行同步)

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

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

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

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

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

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

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

  • leader確定當前的follower的數(shù)據(jù)同步點(從follower大的zxid到leader大的zxid之間數(shù)據(jù)需要同步)

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

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

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

5. ZooKeeper 中各個角色的工作職責

  (1)Leader

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

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

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

   (2)follower

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

  • 接收leader的消息并進行相應的處理

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

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

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

名稱欄目:大數(shù)據(jù)生態(tài)之zookeeper(原理)-創(chuàng)新互聯(lián)
文章起源:http://muchs.cn/article16/ddcddg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、ChatGPT、電子商務網(wǎng)站設計公司、服務器托管手機網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)