zookeeper集群及ZAB简介

集群

  普通的集群模式一般是主备模式(Master/Slave模式),Master作为主服务器提供写服务,Slave作为从服务器,一般采用异步复制的方式获取Master的数据提供读服务。

  在Zookeeper中,没有使用传统模式,而是引入了Leader,Follower,Observer三种角色。
  ZooKeeper集群中的所有机器通过一个Leader选举算法来选定一台称为 “Leader” 的机器,Leader既可以为客户端提供写服务又能提供读服务。除了Leader外,Follower和Observer都只能提供读服务。
  Follower和Observer唯一的区别在于Observer机器不参与Leader的选举过程,也不参与写操作的“过半写成功”策略,因此Observer机器可以在不影响写性能的情况下提升集群的读性能。

zookeeper角色


ZAB简介

  ZAB(ZooKeeper Atomic Broadcast 原子广播)协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。在ZooKeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,ZooKeeper实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
  ZAB协议包括两种基本模式:崩溃恢复和消息广播。

崩溃恢复

  当整个服务框架在启动过程中,或是当Leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进人恢复模式并选举产生新的Leader服务器。
  当选举产生了新的Leader服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。其中,所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致。

消息广播

  当集群中已经有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进人消息广播模式了。
  当一台同样遵守ZAB协议的服务器启动后加人到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加人的服务器就会自觉地进人数据恢复模式:找到Leader所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。
  正如上文介绍中所说的,ZooKeeper设计成只允许唯一的一个Leader服务器来进行事务请求的处理。Leader服务器在接收到客户端的事务请求后,会生成对应的事务提案并发起一轮广播协议;而如果集群中的其他机器接收到客户端的事务请求,那么这些非Leader服务器会首先将这个事务请求转发给Leader服务器。