1、zk的三种角色:

zookeeper角色命令 zookeeper中的角色_ZK

Zookeeper 集群中Server有三种角色,Leader、Follower 和 Observer

  • Leader:负责投投票的发起与决议,更新系统状态,写数据
  • Follower:用于接收客户端请求并用来返回结果,在选主过程中参与投票
  • Observer:可以接受客户端连接,将写请求转发给leader节点,但是不参与投票过程,只同步leader状态,主要存在目的就是为了提高读取效率

引进Observer角色作用:Zookeeper需保证高可用和强一致性,为了支持更多的客户端,需要增加更多 Server;Server 增多,投票阶段延迟增大,影响性能;引入 Observer, Observer不参与投票; Observers接受客户端的连接,并将写请求转发给leader节点; 加入更多Observer节点,提高伸缩性,同时不影响吞吐率。

 Zookeeper 建议集群节点个数为奇数,只要超过一半的机器能够正常提供服务,那么整个集群都是可用的状态,最少满足2n+1台(n >= 1)

 Zookeeper 的数据一致性是依靠ZAB协议完成的。

ZAB(ZooKeeper Atomic Broadcast 原子广播)协议

支持崩溃恢复原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式(即Leader和Follower模型)的系统架构来保持集群中各个副本之间的数据一致性。

ZAB 协议包括有两种模式,分别是 崩溃恢复和消息广播

当整个 zookeeper 集群刚刚启动或者 Leader 服务器宕机、重启或者网络故障导致不存在过半的服务器与Leader服务器保持正常通信时,所有服务器进入崩溃恢复模式,首先选举产生新的 Leader 服务器,然后集群中 Follower 服务 器开始与新的 Leader 服务器进行数据同步,当集群中超过半数机器与该 Leader 服务器完成数据同步之后,退出恢复模式进入消息广播模式,Leader 服务器开始接收客户端的事务请求生成事物提案来进行处理