常见的集群模式是: Master/Slave 模式(主备模式)。在这种模式中,通常 Master 服务器作为主服务器提供写服务,其他的 Slave 服务器通过异步复制的方式来获取 Master 服务器最新的数据,并且提供读服务。
但是,在 ZooKeeper 中并没有选择传统的 Master/Slave 概念,而是引入了 Leader、Follower 和 Observer 三种角色,如下图所示:
ZooKeeper 集群
在 ZooKeeper 集群中,所有的机器通过 Leader 选举过程来选定一台称为 “Leader” 的机器,Leader 既可以为客户端提供写服务,也能提供读服务。除了 Leader 外,Follower 和 Observer 都只能提供读服务,Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的 “过半写成功” 策略,故 Observer 机器可以在不影响写性能的情况下提升集群的读性能。
ZooKeeper 中的不同角色
当 Leader 服务器出现网络中断、崩溃退出或重启等异常情况时,ZAB 协议就会进人恢复模式,然后选举产生新的 Leader 服务器,这个过程大致是这样的: