如何基於ZK實現高可用架構
zookeeper設計步驟
設計path 節點的路徑
選擇znode型別 普通節點、臨時節點等
設計znode資料 節點中的資料
設計watch 節點的監聽事件以及對應的處理
ZK實現主備切換架構
1、設計2個臨時節點 master slave
2、master節點掛掉時 slave升級master
3、由於切換時可能會資料衝突,master節點需要記錄時間
4、節點啟動時嘗試建立master節點,如果失敗則建立slave節點。 當slave節點收到master丟失的事件時,嘗試建立master節點,如果成功刪除slave節點。
ZK實現叢集選舉
1、最小節點數獲勝
共用parent node,叢集中每個節點在parent node下建立節點
當leader節點掛掉時,編號最小的znode成為leader,因此使用臨時有序節點
根據業務寫入節點
啟動後在parent節點下建立有序的臨時節點;編號最小的znode成為leader; 當parent下節點刪除時判斷是否為leader
2、搶建唯一節點
所有節點只有一個leader 節點,本質上是一個分散式鎖。
當leader掛掉時,所有節點搶注leader節點,誰搶到是誰的。所以用臨時節點。
根據業務寫入資料
啟動後所有節點搶注leader,監控到leader刪除後所有節點搶注leader
3、法官判決
共用父節點
編號最小的成為法官,因此使用有序臨時節點
根據業務需要寫入資料,比如事務的ID
編號最小的節點成為法官,法官負責選舉規則,監聽到節點刪除時所有節點更新選舉資料,法官讀取所有節點資料根據演算法選出leader並寫入父節點,所有節點監聽父節點確認自己是不是leader