从Paxos到zookeeper

mac2025-10-25  4

Zookeeper如何实现数据一致性

Zookeeper使用ZAB算法实现,Zookeepr并没有完全采用Paxos算法,而是使用原子广播协议,(Zookeeper Atomic Broadcast) 三个阶段:发现,同步和广播 ZAB保证了同一时刻只能有一个主进程来进行状态变更

协议过程

选举leader

每个follower广播自己事务队列中最大事务编号maxId 获取集群中其他follower发出来的maxId,选取出最大的maxId所属的follower,投票给改follower,选它为leader。 统计所有投票,获取投票数超过一半的follower被推选为leader

同步数据

各个follower向leader发送自己保存的任期E leader,比较所有的任期,选取最大的E,加1后作为当前的任期E=E+1 将任务E广播给所有follower follower将任期改为leader发过来的值,并且返回给leader事务队列L leader从队列集合中选取任期最大的队列,如果有多个队列任期都是最大,则选取事务编号n最大的队列Lmax。将Lmax最为leader队列,并且广播给各个follower。 follower接收队列替换自己的事务队列,并且执行提交队列中的事务。 至此各个节点的数据达成一致,zookeeper恢复正常服务。

广播

leader节点接收到请求,将事务加入事务队列,并且将事务广播给各个follower。 follower接收事务并加入都事务队列,然后给leader发送准备提交请求。 leader 接收到半数以上的准备提交请求后,提交事务同时向follower 发送提交事务请求 follower提交事务。

Zookeeper分布式锁实现

最新回复(0)