zookeeper - 應用實現

 

實現一個分佈式鎖 node

經過在zookeeper的某路徑節點下建立臨時序列節點來實現分佈式鎖,即每一個線程(跨進程的線程)獲取同一把鎖前,都須要在一樣的路徑下建立一個節點,節點名字由uuid + 遞增序列組成。而經過對比自身的序列數是否在全部子節點的第一位,來判斷是否成功獲取到了鎖。當獲取鎖失敗時,它會添加watcher來監聽前一個節點的變更狀況,而後進行等待狀態。直到watcher的事件生效將本身喚醒,或者超時時間異常返回。app

 

讓咱們分析如何在ZooKeeper集合中選舉leader節點。考慮一個集羣中有N個節點。分佈式

leader選舉的過程以下:ui

  • 全部節點建立具備相同路徑 /app/leader_election/guid_ 的順序、臨時節點。
  • ZooKeeper集合將附加10位序列號到路徑,建立的znode將是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
  • 對於給定的實例,在znode中建立最小數字的節點成爲leader,而全部其餘節點是follower。
  • 每一個follower節點監視下一個具備最小數字的znode。例如,建立znode/app/leader_election/guid_0000000008的節點將監視znode/app/leader_election/guid_0000000007,建立znode/app/leader_election/guid_0000000007的節點將監視znode/app/leader_election/guid_0000000006。
  • 若是leader關閉,則其相應的znode/app/leader_electionN會被刪除。
  • 下一個在線follower節點將經過監視器得到關於leader移除的通知。
  • 下一個在線follower節點將檢查是否存在其餘具備最小數字的znode。若是沒有,那麼它將承擔leader的角色。不然,它找到的建立具備最小數字的znode的節點將做爲leader。
  • 相似地,全部其餘follower節點選舉建立具備最小數字的znode的節點做爲leader。
相關文章
相關標籤/搜索