《从Paxos到ZooKeeper》第七章总结九-2:ZooKeeper技术内幕之存储

《从Paxos到ZooKeeper》第七章总结九-1:ZooKeeper技术内幕之数据

9.4 初始化

含义:
在这里插入图片描述

9.4.1 初始化流程

在这里插入图片描述
FileTxnSnapLog:
在这里插入图片描述
PlayBackListener:
在这里插入图片描述

9.5 数据同步

集群完成Leader选举之后,Learner会向Leader服务器进行注册,注册完成之后,就进入数据同步环节,即Leader服务器将那些没有在Learner服务器上提交过的事务请求同步给Learner服务器

流程:
在这里插入图片描述

9.5.1 获取Learner状态

在这里插入图片描述

9.5.2 数据同步初始化

从内存数据库中提取出事务请求对应的提议缓存队列:proposals,同时进行对以下三个ZXID值的初始化:
在这里插入图片描述

9.5.3 直接差异化同步

场景:peerLastZxid介于minCommittedLog和maxCommittedLog之间

过程:
在这里插入图片描述
例子:
在这里插入图片描述
Leader与Learner之间的数据通信:
在这里插入图片描述

9.5.4 先回滚再差异化同步(TRUNC+DIFF同步)

场景:Leader挂了
在这里插入图片描述
过程:
在这里插入图片描述

9.5.5 仅回滚同步(TRUNC同步)

场景:peerLastZxid大于maxCommittedLog

过程:Leader会要求Learner回滚到ZXID值为maxCommitedLog对应的事务操作

9.5.6 全量同步(SNAP同步)

场景:peerLastZxid小于minCommittedLog;Leader服务器上没有提议缓存队列,peerLastZxid不等于lastProcessedZxid(Leader服务器数据恢复后得到的最大ZXID);
这两种场景下Leader服务器都无法直接使用提议缓存队列和Learner进行数据同步,因此只能进行全量同步

过程:
在这里插入图片描述
总结:

Leader的LeaderZxid如果大于Learner的maxCommitedLogZxid,说明Learner可以执行Leader的所有操作,因为maxCommitedLog之前的已经执行过了,所以Learner回滚到maxCommitedLog这里,执行之后的操作即可,即仅回滚同步

Leader的LeaderZxid如果介于于Learner的maxCommitedLogZxid和minCommitedLogZxid,说明Learner可以执行Leader的zxid之后的操作,因为minCommitedLogZxid和LeaderZxid之间的的说明已经执行过了,所以执行maxCommitedLogZxid和LeaderZxid之间的即可,即直接差异化同步,可以改进为先回滚再差异化同步(即紧接着LeaderZxid依次执行)

Leader的LeaderZxid如果小于Learner的minCommitedLogZxid,说明Learner可以执行Leader的所有操作,因为minCommitedLogZxid之前的操作的说明都没有执行过,即LeaderZxid的操作,所以执行Leader的所有操作,即全量同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值