1. 程式人生 > >zookeeper系列(一)——簡介和原理

zookeeper系列(一)——簡介和原理

Zookeeper簡介和工作原理

簡介

  Zookeeper 分散式服務框架是 Apache Hadoop 的一個子專案,它主要是用來解決分散式應用中經常遇到的一些資料管理問題,如:統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等
  Zookeeper工作流程是首先選舉一個伺服器作為leader,leader會更新伺服器狀態、資料互動。當叢集中其他伺服器learner會更新伺服器狀態、資料交換。當前leader失聯時,其他伺服器會選舉投票產生一個新的learner。
  Zookeeper的角色分為以下三種

角色 功能
Leader 更新伺服器狀態、資料
LearnerFollower接收client請求並處理返回、投票選舉leader 、同步leader
Observer 接收client請求,但把寫的請求給leader。不能投票選舉leader,同步leader。擴充套件只讀伺服器,提高讀取速度。

工作原理

  Zookeeper採用原子訊息廣播協議(ZAB)作為資料一致性演算法。Zookeeper採用單一主執行緒leader來處理客戶端的所有事務處理,將伺服器數、狀態以事務的形式廣播到所有Follower;由於事務之間有依賴關係,leader保證事務順序廣播,即被依賴的先廣播;ZAB支援崩潰恢復,即leader崩潰後選舉新的leader並保證資料的完整。
  Leader接收client的事務請求後,會將事務請求轉成事務Proposal,並且將事務Proposal分發給叢集下所有的follower,然後leader等待follower的反饋資訊。當有一半以上的follower反饋資訊後,leader再次向follower廣播事務commit資訊,follower將之前的Proposal提交。
  ZAB協議有三種狀態,所有的節點(伺服器),都屬於這三種狀態中一種
  looking:在伺服器啟動時或leader崩潰時,處於的選舉狀態。
  following:follower所處的狀態,同步leader。
  leading:leader所處的狀態,當前有一個leader是主程序。
  Zookeeper啟動時所有節點處於looking狀態,選舉出leader節點,該節點狀態切換為leading;looking節點發現叢集中存在leader節點時狀態切換為followering,與leader保持同步;follower節點與leader失聯時,狀態切換為looking,並開始選舉。
   選舉出leader後ZAB進入原子廣播狀態,leader會為每個follower生成一個操作序列,一個leader在同一時間只能和一個follower保持同步,leader和follower通過心跳檢測來感知對方存在;當leader節點在超時時間類接收到來自follower節點的心跳檢測,follower節點會保持與該leader節點的連線;當leader節點在超時時間外未接受到過半follower節點的心跳檢測或TCP斷開連線,該leader節點結束當前領導狀態切換為looking,所有follower節點也會放棄該leader節點狀態切換looking,開始新一輪選舉。