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接收到的失败。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章