Zookeeper是分布式,开放源码的分布式应用程序协调服务,包含一个简单原语集,
分布式应用程序可以基于它实现同步服务,配置维护和命名服务。
Zookeeper工作原理
Zookeeper核心是原子广播,此机制保证各个Server之间的同步,实现这个机制的协议是Zab协议,Zab协议包括两种模式。
恢复模式:当服务启动或者领导者(Leader)崩溃后,Zab进入恢复模式,当领导者被重新选举出来,各个Server与Leader同步状态信息后,恢复模式结束,状态同步保证了Leader和各个Server具有相同的系统状态。
广播模式:一旦Leader和多数Follower进行了状态同步后,开始广播消息,Zookeeper一直维持广播模式,直到Leader宕机或者失去大部分Follower的支持。
Zookeeper角色
领导者(Leader)
负责进行投票和决议,更新系统状态。
跟随者(Follower)
Follower接收客户端请求并向客户端返回结果,在选举过程中参与投票
客户端(Client)
请求方
Zookeeper数据模型
层次化目录结构,命名符合文件系统规范
每个节点称为znode,并且分配唯一的路径标识
节点znode可以包含数据和子节点
znode中的数据可有多个版本
客户端应用可以在节点上设置监视器
节点不支持部分读写,支持一次性读写
Zookeeper节点类型
持久节点类型(Persistent)
临时节点类型(Ephemeral)
Zookeeper读写机制
Zookeeper集群包括一个Leader和多个Follower,每个Server上保存一份数据副本,全局数据保持一致,更新请求转发由Leader负责。
Leader选举算法
LeaderElection
UDP服务,每个Server轮询所有server,获取每个Server的投票,统计zxid最大的server得票数,
同时更新自己的投票,当得票>1/2节点数时选举结束。
等待所有服务器返回后再统计投票结果,最后选择Leader可能不是zxid最大的server
FastLeaderElection
添加logicalclock控制,每次新的选举,所有节点的初始值相同,每次收到回复都会计算投票结果
当得票>1/2节点数时选举结束。