zookeeper通过二阶段提交来保证集群中数据的一致性,因为只需要收到过半的ACK就可以提交事务,所以zookeeper的数据并不是强一致性。
选举发生的时机Leader发生选举有两个时机:
一个是服务启动的时候当整个集群都没有leader节点会进入选举状态,如果leader已经存在就会告诉该节点leader的信息,自己连接上leader,整个集群不用进入选举状态。
还有一个就是在服务运行中,可能会出现各种情况,服务宕机、断电、网络延迟很高的时候leader都不能再对外提供服务了,所有当其他follower通过心跳检测到leader失联之后,集群也会进入选举状态。
选举机制(机制)zookeeper默认使用majority quorums(过半机制)选举leader:可用节点数量 > 总节点数量/2
选举流程所有节点第一票先选举自己当leader,将投票信息广播出去;
从队列中接受投票信息;
按照规则判断是否需要更改投票信息,将更改后的投票信息再次广播出去;
判断是否有超过一半的投票选举同一个节点,如果是选举结束根据投票结果设置自己的服务状态,选举结束,否则继续进入投票流程。
选举后怎么进行数据同步 脑裂在集群中,由于网络分区节点之间通信不可达的情况时,集群中出现两个或多个master(leader)的情况。
zk官网判断集群是否可用的文章:
集群搭建-------Zookeeper集群节点数量为什么要是奇数个?https://www.cnblogs.com/ysocean/p/9860529.html
zookeeper选举的规则:leader选举,要求 可用节点数量 > 总节点数量/2
1、防止由脑裂造成的集群不可用。
2、在容错能力相同的情况下,奇数台更节省资源。
Zookeeper 实现分布式锁https://mp.weixin.qq.com/s/ZqQHWLfVD1Rz1agmH3LWrg
https://blog.csdn.net/crazymakercircle/article/details/85956246
https://mp.weixin.qq.com/s/YawG0GqznDHaiHXZuTsCjA
https://www.w3cschool.cn/zookeeper/
https://www.cnblogs.com/felixzh/p/5869212.html
https://my.oschina.net/yunqi/blog/3040280
分布式一致性算法-Paxos、Raft、ZAB、Gossiphttps://zhuanlan.zhihu.com/p/130332285
https://zhuanlan.zhihu.com/p/147691282
https://www.jianshu.com/p/2bd30b3ac5f7