1,2 的回顾
①集群(zoo.cfg,myid)
②znode 节点的数据模型 、
特性(有序,临时(断开消失,不能有子节点,不能重复在一个级别的)
③节点的stat 一些参数的以一cZxid
zookeeper的由来详细
比如现在有
分布式的一个协调机制
1,我们用到zookeeper就要防止单点故障(使用集群) 集群特点:高可用,高性能。
2,保持每台数据的一致性
3,如果leader挂了,怎么办
4,如果实现分布式事务(2pc)方式
2pc 示意图
为什么是2n+1台服务器。要过半数 如果是5台,最多可以挂掉2台,如果是6台,最多也是挂掉2台
集群整体工作图
从客户端或者是follower传过来的请求,leader会将请求的数据封装成一个zxid (64位的唯一)
2,将有这个id 的proposal对象给每个follower ,每个节点去修改数据。写入本地磁盘,
3,给leader一个反馈,是失败还是成功了
4,当leader收到过半成功的反馈之后,再给每个follower。告诉他们可以提交了。
如果在4的过程中leader挂了,也就是一部分follower收到了,一步分没有收到。怎么办?
同步到follower的消息,就保存,如果没有,那么就放弃。
以上这个是集群自身同步的2pc
ZAB协议
主要干嘛用的:
重新选举一个leader 就是这么一个作用。具体怎么选,就是实现的问题了。
通过一个zxid 的方式, epoch,这个就是新的leader会+1,
保证集群整体同步 特殊情况(在执行事务的时候挂掉了,怎么办)