zookeeper集群结构
zookeeper参考了Paxos协议,设计了Zab协议
Zab协议
zookeeper采用的Zab协议(ZooKeeper Atomic Broadcast,ZooKeeper原子广播协议),Zab协议分为两个阶段:Leader Election领导选举和Atomic Broadcast原子广播
基于Zab协议,zookeeper实现了一种主备模式(Leader、Follower)的系统架构来保持集群中各副本之间的数据一致性,使得zookeeper成为了解决分布式数据一致性问题的解决方案
zookeeper中有三种类型的节点leader、follower、observer(follower、observer属于learner)
分为三个步骤
- Leader包装写请求,生成唯一zxid,发起提议,广播给所有Follower
- Follower收到提议后,写入本地事务日志,根据自身情况,是否同意该事务的提交
- Leader收到过半的follower同意,自己先添加事务。然后对所有的learner节点发送提交事务请求
领导选举
当zookeeper集群启动时,会选举出一个节点为Leader,其他节点为Follower。如果Leader挂了之后,会从follower中选举出新的Leader(谁的数据最新,谁就有优先被选为Leader的资格【比较事务id】),并让所有节点恢复到一个正常的状态
原子广播
领导选举阶段完成之后,就会进入原子广播阶段,同步Leader节点和各个Follower节点之间的数据,确保Leader和Follower节点具有相同的状态,所有的写操作都会发送到Leader节点,并通过广播的方式将数据同步到其他Follower节点
集群
zookeeper集群中的每个节点都会在内存中维护当前服务器状态,并且每个节点之间都会保持童心,只要集群中存在超过半数以上的节点可以正常工作,那么整个集群就可以正常的提供服务