什么是zookeeper
zookeeper是一个分布式的,开放源码的协调服务,是Hadoop和Hbase重要组件,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护,域名服务,分布式同步,组服务等。
zookeeper下的角色
zookeeper下大致有三种角色
leader 领导者:发起一个请求,并且投票
follower 跟从者:响应leader的请求并发起投票
observer 监视leader,并将leader的状态告诉follwer
关于zookeeper的端口
2888端口:提供zookeeper对外通信
3888端口:当leader挂掉之后,重新选择leader的时候提供对外通信
ZAB协议
ZAK协议是为分布式协调服务zookeeper专门设计的一种支持崩溃恢复的原子广播协议。在Zookeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,Zookeeper实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
Zookeeper客户端会随机连接到Zookeeper集群的一个节点,如果是读请求,就直接从当前节点中读取数据:如果是写请求,那么节点就会向leader提交事物,leader会广播事物,只要有超过半数节点写入成功,该写请求就会被提交。
-
Zookeeper的选举机制
节点在一开始都处于选举阶段,只要有一个节点得到超半数节点的票数,它就可以当选准leader。只有打到广播阶段准leader才会成为真正的leader。 -
发现阶段
在这个阶段,followers跟准leader进行通信,同步followers最近接收的事物提议。这个阶段的主要目的是发现当前大多数节点接收的最新提议,并且准leader生成新的epoch让followers接受,更新他们的acceptedEpoch -
同步阶段
同步阶段主要是利用leader前一阶段获得的最新提议历史,同步集群中所有的副本,只有当quorum都同步完成,准leader才会成为真正的leader。follower指挥接收zxid比自己的lastZxid大的提议 -
广播阶段
到了这个阶段,Zookeeper集群才能正式对外提供事务服务,并且leader可以进行消息广播,同时如果有新的节点加入,还需要对新节点进行同步 -
监听机制
fllower查看leader的状态,然后将状态信息进行更新和发送 -
原子广播
有一个写入请求,将请求传给follower
follower将请求转发给leader
leader将请求下发给各个follower进行写入
follower写入过半及为成功,所以zookeeper的节点最好是单数
Zookeeper的基本语法
zkService.sh start 启动zookeeper
zkService.sh stop 关闭zookeeper
zkService.sh status zookeeper状态
zkCli.sh -server 192.168.24.150:2181(2181是对外提供的端口)连接客户端
Zookeeper的znode类型
持久节点
临时节点
持久顺序节点
临时顺序节点
成为leader的条件
选epoch最大的
epoch相等,选zxid最大的
epoch和zxid都相等,选server id最大的(就是配置zoo.cfg的myid)