zookeeper 协议

paxos协议 (zookeeper zab协议就是参考他的)

  • paxos 是基于消息传递的一致性算法
  • 他是目前唯一的分布式一致性算法
  • 每次操作都必须 所有议员半数/2 + 1 通过才会生效。
  • 当主节点收到半数以上的响应为成功时则将操作升级为法令。

重点

  • 过半通过
  • 2阶段提交(第一阶段发送提议,第二阶段过半人数给主节点发送响应)

leader节点挂了

  • follow节点会推选新的leader分支,并且所有写操作停止工作

ZAB协议

  • 是zookeeper 的原子广播协议
  • 作用在可用状态(有leader)
  • zookeeper leader节点同样有选举权

zookeeper里的应用

写操作

  1. client端向follow节点发起写操作
  2. follow 节点向leader节点发起申请
  3. leader 节点询问所有follow节点 并通过2阶段确认后,修改数据

关于数据一致性问题

  • 存在一种情况leader 选举时某个zookeeper 节点没正常收到leader节点广播的数据变更动作,则会返回版本滞后的数据,此时client 端可以使用zookeeper 的sync 操作去同步准确的数据(sync是一个可选的操作!)
  • 如果follow 节点挂了的情况,在重启后会同步leader节点的数据,所以不会存在数据一致性问题

问题

  • leader挂掉后应该选举哪个follow节点做leader?

选择zxid 最高的(zxid是事件id,也就代表了这个follow节点的数据是最完整的)