问题导读
一、说说 Zookeeper 的服务器角色?
二、Zookeeper 下 Server 工作状态?
三、Zookeeper 的数据同步 是怎样的?
01
说说 Zookeeper 的服务器角色?
正经回答:
Leader
(1)事务请求的唯一调度和处理者,保证集群事务处理的顺序性
(2)集群内部各服务的调度者
Follower
(1)处理客户端的非事务请求,转发事务请求给 Leader 服务器
(2)参与事务请求 Proposal 的投票
(3)参与 Leader 选举投票
Observer
(1)3.0 版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础 上提升集群的非事务处理能力
(2)处理客户端的非事务请求,转发事务请求给 Leader 服务器
(3)不参与任何形式的投票
朋友圈分享一下
02
Zookeeper 下 Server 工作状态?
正经回答:
服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。
(1)LOOKING:寻 找 Leader 状态。当服务器处于该状态时,它会认为当前集 群中没有 Leader,因此需要进入 Leader 选举状态。
(2)FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。
(3)LEADING:领导者状态。表明当前服务器角色是 Leader。
(4)OBSERVING:观察者状态。表明当前服务器角色是 Observer。
03
Zookeeper 的 数据同步 是怎样的?
正经回答:
整个集群完成 Leader 选举之后,Learner(Follower 和 Observer 的统称) 回向 Leader
服务器进行注册。
当 Learner 服务器想 Leader 服务器完成注册 后,进入数据同步环节。
数据同步流程:
(均以消息传递的方式进行)
Learner 向 Learder 注册
数据同步
同步确认
Zookeeper 的数据同步通常分为四类:
(1)直接差异化同步(DIFF 同步)
(2)先回滚再差异化同步(TRUNC DIFF 同步)
(3)仅回滚同步(TRUNC 同步)
(4)全量同步(SNAP 同步)
在进行数据同步前,Leader 服务器会完成数据同步初始化:
peerLastZxid:
· 从 learner 服务器注册时发送的 ACKEPOCH 消息中提取 lastZxid(该 Learner 服务器最后处理的 ZXID)
minCommittedLog:
· Leader 服务器 Proposal 缓存队列 committedLog 中最小
ZXIDmaxCommittedLog:
· Leader 服务器 Proposal 缓存队列 committedLog 中最大 ZXID
直接差异化同步(DIFF同步)
· 场景:peerLastZxid 介于 minCommittedLog 和 maxCommittedLog 之间
先回滚再差异化同步(TRUNC DIFF 同步)
· 场景:当新的 Leader 服务器发现某个 Learner 服务器包含了一条自己没 有的事务记录,那么就需要让该 Learner 服务器进行事务回滚--回滚到 Leader 服务器上存在的,同时也是最接近于 peerLastZxid 的 ZXID
仅回滚同步(TRUNC 同步)
· 场景:peerLastZxid 大于 maxCommittedLog
全量同步(SNAP 同步)
· 场景一:peerLastZxid 小于 minCommittedLog
· 场景二:Leader 服务器上没有 Proposal 缓存队列且 peerLastZxid 不等 于lastProcessZxid
- End -