一、Zookeeper角色的分類
-
領導者(leader)
Leader服務器為客戶端提供讀服務和寫服務。 -
學習者(learner)
- 跟隨者(follower)
Follower服務器為客戶端提供讀服務,參與Leader選舉過程,參與寫操作“過半寫成功”策略。 - 觀察者(observer)
Observer服務器為客戶端提供讀服務,不參與Leader選舉過程,不參與寫操作“過半寫成功”策略。用於在不影響寫性能的前提下提升集群的讀性能。
- 跟隨者(follower)
-
客戶端(client)
服務請求發起方。
Zookeeper集群管理圖:
二、Zookeeper角色的狀態
- LOOKING:
當前Server未知集群中的Leader,並且正在尋找。 - LEADING:
當前Server即為選舉出來的Leader。 - FOLLOWING:
當前Follower已與選舉出來的Leader同步。 - OBSERVING
當前Observer已與選舉出來的Leader同步。
三、Zookeeper各角色的作用
3.1、Zookeeper中的請求
- 事務請求:
在Zookeeper中,會改變服務器狀態的請求稱為事務請求(包括:創建節點、更新數據、刪除節點、創建會話等) 。 - 非事務請求
從Zookeeper僅僅讀取數據,不會對服務器數據狀態進行任何修改的請求稱為非事務請求。
3.2、Leader的作用
- 在ZAB崩潰恢復之后,消息廣播之前,進行集群中的數據同步;
- 維持與Learner的心跳,接收Learner請求消息,並據不同的消息類型,進行不同的處理;
- Learner處理的消息類型包括:PING消息、REQUEST消息、ACK消息、REVALIDATE消息等。
其中,PING消息指Learner的心跳信息;REQUEST消息是Follower發送的提議信息,包括寫請求及同步請求;ACK消息是Follower的對提議的回復,超過半數的Follower通過,則commit該提議;REVALIDATE消息是用來延長SESSION有效時間。
Leader的工作流程簡圖如下所示,實際上流程要比下圖復雜得多,啟動了三個線程來實現功能:
3.3、Follower的作用
Follower主要有四個功能:
- 向Leader發送請求(PING請求、REQUEST消息、ACK請求、REVALIDATE消息);
- 接收Leader 的消息並進行處理;
- 接收Client的請求,如果為寫請求,發送給Leader進行投票;
- 返回Client請求結果。
Follower的消息循環處理以下來自Leader的消息:
- PING消息:心跳消息;
- PROPOSAL消息:Leader發起的提案,要求Follower投票;
- COMMIT消息:服務器端最新一提案的信息;
- UPTODATE消息:表示同步完成;
- REVALIDATE消息:根據Leader的REVALIDATE結果,關閉待revalidate的session還是允許其接受消息;
- SYNC消息:返回SYNC結果到客戶端,這個消息最初由客戶端發起,用來強制得到最新的數據更新。
3.3、Observer的作用
Observer角色除了不參與Leader選舉和Proposal投票外,與Follower的作用相同。
四、參考資料
參考書籍:從Paxos到Zookeeper:分布式一致性原理與實踐
參考博客:https://blog.csdn.net/yu757371316/article/details/80742223
出處: https://www.cnblogs.com/DeepInThought
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。