天天看點

Zookeeper 叢集中節點之間資料是如何同步的

1.首先叢集啟動時,會先進行上司者選舉,确定哪個節點是 Leader ,哪些節點是 Follower 和 Observer

2.然後 Leader 會和其他節點進行資料同步,采用發送快照和發送 Diff 日志的方式

3.叢集在工作過程中,所有的寫請求都會交給 Leader 節點來進行處理,從節點隻能處理讀請求

4.Leader節點收到一個寫請求時,會通過兩階段機制來處理

5.Leader節點會将該寫請求對應的日志發送給其他 Follower 節點,并等待 Follower 節點持久化日志成功

6.Follower節點收到日志後會進行持久化,如果持久化成功則發送一個 Ack 給 Leader 節點

7.當 Leader 節點收到半數以上的 Ack 後,就會開始送出,先更新 Leader 節點本地的記憶體資料

8.然後發送 commit 指令給 Follower 節點, Follower 節點收到 commit 指令後就會更新各自本地記憶體資料

9.同時 Leader 節點還是将目前寫請求直接發送給 Observer 節點, Observer 節點收到 Leader 發過來的寫請求後直接執行更新本地記憶體資料

10.最後 Leader 節點傳回用戶端請求響應成功

11.通過同步機制和兩階段送出機制來達到叢集中節點資料一緻