zookeeper zab协议选举 watch 监控
zookeeper 协议
paxos协议 (zookeeper zab协议就是参考他的)
- paxos 是基于消息传递的一致性算法
- 他是目前唯一的分布式一致性算法
- 每次操作都必须 所有议员半数/2 + 1 通过才会生效。
- 当主节点收到半数以上的响应为成功时则将操作升级为法令。
重点
- 过半通过
- 2阶段提交(第一阶段发送提议,第二阶段过半人数给主节点发送响应)
leader节点挂了
- follow节点会推选新的leader分支,并且所有写操作停止工作
ZAB协议
- 是zookeeper 的原子广播协议
- 作用在可用状态(有leader)
- zookeeper leader节点同样有选举权
zookeeper里的应用
写操作
- client端向follow节点发起写操作
- follow 节点向leader节点发起申请
- leader 节点询问所有follow节点 并通过2阶段确认后,修改数据
关于数据一致性问题
- 存在一种情况leader 选举时某个zookeeper 节点没正常收到leader节点广播的数据变更动作,则会返回版本滞后的数据,此时client 端可以使用zookeeper 的sync 操作去同步准确的数据(sync是一个可选的操作!)
- 如果follow 节点挂了的情况,在重启后会同步leader节点的数据,所以不会存在数据一致性问题
问题
- leader挂掉后应该选举哪个follow节点做leader?
选择zxid 最高的(zxid是事件id,也就代表了这个follow节点的数据是最完整的)