Zookeeper互联网大厂高频面试题—4
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper互联网大厂高频面试题—4相关的知识,希望对你有一定的参考价值。
14. Zookeeper 下Server 工作状态
服务器具有四种状态,分别是LOOKING、FOLLOWING、LEADING、OBSERVING。
1、LOOKING:寻找Leader 状态。当服务器处于该状态时,它会认为当前集群中
没有Leader,因此需要进入Leader 选举状态。
2、FOLLOWING:跟随者状态。表明当前服务器角色是Follower。
3、LEADING:领导者状态。表明当前服务器角色是Leader。
4、OBSERVING:观察者状态。表明当前服务器角色是Observer。
15. 数据同步
整个集群完成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 中最小ZXID
maxCommittedLog:
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
16. zookeeper 是如何保证事务的顺序一致性的?
zookeeper 采用了全局递增的事务Id 来标识, 所有的proposal(提议) 都在被提出的时候加上了zxid,zxid 实际上是一个64 位的数字,高32 位是epoch( 时期; 纪元; 世; 新时代)用来标识leader 周期,如果有新的leader 产生出来,epoch会自增, 低32 位用来递增计数。当新产生proposal 的时候, 会依据数据库的两阶段过程,首先会向其他的server 发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。
17. 分布式集群中为什么会有Master?
在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能, 于是就需要进行leader 选举。
18. zk 节点宕机如何处理?
Zookeeper 本身也是集群,推荐配置不少于3 个服务器。Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。
如果是一个Follower 宕机,还有2 台服务器提供访问,因为Zookeeper 上的数据是有多个副本的,数据并不会丢失;
如果是一个Leader 宕机,Zookeeper 会选举出新的Leader。
ZK 集群的机制是只要超过半数的节点正常, 集群就能正常提供服务。只有在ZK节点挂得太多,只剩一半或不到一半节点能工作, 集群才失效。
所以
3 个节点的cluster 可以挂掉1 个节点(leader 可以得到2 票>1.5)
2 个节点的cluster 就不能挂掉任何1 个节点了(leader 可以得到1 票<=1)
以上是关于Zookeeper互联网大厂高频面试题—4的主要内容,如果未能解决你的问题,请参考以下文章