zooKeeper和ZAB協議總結一下

zookeeper的主備同步和leader選舉是通過ZAB協議來完成的。寫一下能夠記得更牢一些。
因爲ZK大多數是讀,少部分寫,所以讀都是讀follower。寫的是leader
數據同步的過程類似於二階段提交

  1. Client 寫數據到leader,leader爲每一個follower構建隊列,異步將寫入的數據放到隊列裏
  2. 隊列裏的數據發送proposal給到每一個follower
  3. follower收到後,將數據寫入,並且發送ack
  4. leader收到大多數的ack之後,發送ack給到每一個follower,follower根據如果沒問題就commit,然後發送給leader,leader收到之後給到client

像這樣的分佈式協議,主要還是考慮特殊情況。
可能出現的特殊情況如下:

  1. leader故障,毫無疑問, ZK重新選取主,然後重試
  2. 有一半的follower沒ack,然後就沒法commit,client接收到的也是失敗,數據並沒有持久化了,不會丟失。
  3. leader發送commit 丟了,那麼follower沒法commit,數據也沒持久化下來,client接收到的失敗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章