Zookeeper中的角色


在zookeeper集群中,節點也有不同的角色,承擔着不同角色。

zookeeper有三種角色:

  • 老大:Leader   (領導者)   : 客戶端提供讀服務和寫服務。
  • 老二:Follower(跟隨者)  : 為客戶端提供讀服務,參與Leader選舉過程
  • 老三:Observer(觀察者)  : 為客戶端提供讀服務,不參與Leader選舉過程

    其中:Follower 和 Observer 歸類為 Learner(學習者)

集群管理圖如下:

 

Leader


 

Leader在集群中只有一個節點,可以說是老大No.1,是zookeeper集群的中心,負責協調集群中的其他節點。從性能的角度考慮,leader可以選擇不接受客戶端的連接

所有的跟隨者Follower與觀察者Observer節點的寫請求都會轉交給領導者Leader執行。Leader接受到一個寫請求后,首先會發送給所有的Follower,統計Follower寫入成功的數量。當有超過半數的Follower寫入成功后,Leader就會認為這個寫請求提交成功,通知所有的Follower commit這個寫操作,保證事后哪怕是集群崩潰恢復或者重啟,這個寫操作也不會丟失。

Leader的作用

  • 在ZAB崩潰恢復之后,消息廣播之前,進行集群中的數據同步;
  • 維持與Learner的心跳,接收Learner請求消息,並據不同的消息類型,進行不同的處理;
  • Learner處理的消息類型包括:PING消息、REQUEST消息、ACK消息、REVALIDATE消息等。

其中:

  • PING消息:指Learner的心跳信息;
  • REQUEST消息:是Follower發送的提議信息,包括寫請求及同步請求;
  • ACK消息:是Follower的對提議的回復,超過半數的Follower通過,則commit該提議;
  • REVALIDATE消息:是用來延長SESSION有效時間。

Leader的工作流程簡圖如下所示,實際上流程要比下圖復雜得多,啟動了三個線程來實現功能:

 

Follower


Follow在集群中有多個,主要的作用有:

  • 與老大Leader保持心跳連接
  • 當Leader掛了的時候,經過投票后成為新的leader。leader的重新選舉是由老二Follower們內部投票決定的。
  • 向Leader發送請求(PING請求、REQUEST消息、ACK請求、REVALIDATE消息)
  • 處理leader發來的消息與請求
  • 接收Client的請求,如果為寫請求,發送給Leader進行投票;
  • 返回Client請求結果。

Follower的工作流程簡圖:

 

 

其中:

  • UPTODATE消息:表示同步完成;
  • REVALIDATE消息:根據Leader的REVALIDATE結果,關閉待revalidate的session還是允許其接受消息;
  • SYNC消息:返回SYNC結果到客戶端,這個消息最初由客戶端發起,用來強制得到最新的數據更新。

 

Observer


Observer角色除了不參與Leader選舉和Proposal投票外,與Follower的作用相同

可以說Observer是zookeeper集群中最邊緣的存在。Observer的主要作用是提高zookeeper集群的讀性能。通過leader的介紹我們知道zookeeper的一個寫操作是要經過半數以上的Follower確認才能夠寫成功的。那么當zookeeper集群中的節點越多時,zookeeper的寫性能就 越差。為了在提高zookeeper讀性能(也就是支持更多的客戶端連接)的同時又不影響zookeeper的寫性能,zookeeper集群多了一個兒子Observer,只負責:

  • 與leader同步數據
  • 不參與leader選舉,沒有投票權。也不參與寫操作的提議過程。
  • 數據沒有事務化到硬盤。即Observer只會把數據加載到內存。

 

參考資料


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM