51、如何迁移大数据平台中的Zookeeper集群?
参考答案:
(1)先将新增节点添加到原先的Zookeeper集群中同步数据
(2)然后再将原先Zookeeper集群中的节点关闭掉即可
52、zookeeper有哪些常用的应用场景?
参考答案:
(1)数据发布订阅
(2)统一命令服务
(3)分布式通知与协调
(4)分布式锁
(5)集群监控
(6)分布式队列
(7)master选举
53、Zookeeper集群节点数,为什么使用奇数个,而不使用偶数个?
参考答案:
(1)所谓的偶数问题其实是另一个集群优化配置问题,即:集群的容灾数量=集群总节点数/2-1 2)假如集群有5节点,那么最多允许2个节点挂掉,如果有3节点挂了,那么整个集群的选举结果不会满足条件:集群中超过半数的机器拥护。 3)假如集群有6个节点,那么最多也只能挂掉2台,因为挂了3台时,选举结果也不会满足条件:集群中超过半数的机器拥护。
(2)结果可以看出,多那一台用处并不大。所以集群总数推荐为奇数。
54、Zookeeper 提供了什么来实现各种服务?
参考答案:
(1)文件系统
(2)通知机制
55、谈谈你对ZAB协议的理解?
参考答案:
ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议。
ZAB协议包括两种基本的模式:崩溃恢复和消息广播。
当整个zookeeper集群刚刚启动或者Leader服务器宕机、重启或者网络故障导致不存在过半的服务器与Leader服务器保持正常通信时,所有进程(服务器)进入崩溃恢复模式,首先选举产生新的Leader服务器,然后集群中Follower服务器开始与新的Leader服务器进行数据同步,当集群中超过半数机器与该Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader服务器开始接收客户端的事务请求生成事物提案来进行事务请求处理。
56、Zookeeper包含哪四种类型的数据节点 Znode?
参考答案:
(1)PERSISTENT-持久节点
除非手动删除,否则节点一直存在于Zookeeper上
(2)EPHEMERAL-临时节点
临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。
(3)PERSISTENT_SEQUENTIAL-持久顺序节点
基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
(4)EPHEMERAL_SEQUENTIAL-临时顺序节点
基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
57、谈谈你对Zookeeper Watcher 机制理解?
参考答案:
Zookeeper允许客户端向服务端的某个Znode注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据Watcher通知状态和事件类型做出业务上的改变。
58、Zookeeper 服务器有哪些角色?
参考答案:
(1)Leader
事务请求的唯一调度和处理者,保证集群事务处理的顺序性
集群内部各服务的调度者
(2)Follower
处理客户端的非事务请求,转发事务请求给Leader服务器
参与事务请求Proposal的投票
参与Leader选举投票
(3)Observer
3.3.0版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力处理客户端的非事务请求,转发事务请求给Leader服务器不参与任何形式的投票。
59、Zookeeper 下Server工作状态有哪些?
参考答案:
服务器具有四种状态,分别是LOOKING、FOLLOWING、LEADING、OBSERVING。
(1)LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有Leader,因此需要进入Leader选举状态。
(2)FOLLOWING:跟随者状态。表明当前服务器角色是Follower。
(3)LEADING:领导者状态。表明当前服务器角色是Leader。
(4)OBSERVING:观察者状态。表明当前服务器角色是Observer。
60、zookeeper是如何保证事务的顺序一致性的?
参考答案:
zookeeper采用了全局递增的事务Id来标识,所有的proposal(提议)都在被提出的时候加上了zxid,zxid实际上是一个64位的数字,高32位是epoch用来标识leader周期,如果有新的leader产生出来,epoch会自增,低32位用来递增计数。当新产生proposal的时候,会依据数据库的两阶段过程,首先会向其他的server发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。