ZooKeeper集群模式!

在 ZooKeeper 集群中将服务器分成 Leader 、Follow 、Observer 三种角色服务器。

Leader:服务器负责管理集群中其他的服务器,是集群中工作的分配和调度者。

Follow:选举出 Leader 服务器,在发生 Leader 服务器选举的时候。

  • 系统会从 Follow 服务器之间根据多数投票原则,选举出一个 Follow 服务器作为新的 Leader 服务器。

  • Follow 服务器主要负责处理来自客户端的非事务性请求。

Observer:主要负责处理来自客户端的获取数据等请求,并不参与 Leader 服务器的选举操作。

  • 也不会作为候选者被选举为 Leader 服务器。

Observer

负责处理来自客户端的诸如查询数据节点等非事务性的会话请求操作。

与 Follow 服务器不同的是,Observer 不参与 Leader 服务器的选举工作,也不会被选举为 Leader 服务器。

选举机制

Leader 服务器失效时,会在 Follow 集群服务器之间发起投票,最终选举出一个 Follow 服务器作为新的 Leader 服务器。

Leader 服务器的选举操作主要发生在两种情况下:

ZooKeeper 集群服务启动的时候,

ZooKeeper 集群中旧的 Leader 服务器失效时,这时 ZooKeeper 集群需要选举出新的 Leader 服务器。

Leader 选举主要可以分为三大步骤:发起投票、接收投票、统计投票。

发起投票:

  • 在 ZooKeeper 服务器集群初始化启动的时候,集群中的每一台服务器都会将自己作为 Leader 服务器进行投票。

  • 也就是每次投票时,发送的服务器的 myid(服务器标识符)和 ZXID (集群投票信息标识符)等选票信息字段都指向本机服务器。

一个投票信息就是通过这两个字段组成的。

接收投票:

  • 集群中各个服务器在发起投票的同时,也通过网络接收来自集群中其他服务器的投票信息。

  • 在接收到网络中的投票信息后,服务器内部首先会判断该条投票信息的有效性。

  • 检查该条投票信息的时效性,是否是本轮最新投票,并检查该条投票信息是否是处于LOOKING状态的服务器发的。

统计投票:

  • 每条接收到的投票信息,集群中的每一台服务器都会将自己的投票信息与其接收到的 ZooKeeper 集群中的其他投票信息进行对比。

  • 对比的内容是 ZXID,ZXID 数值比较大的投票信息优先作为 Leader 服务器。

  • 如果每个投票信息中的 ZXID 相同,就会比对投票信息中的 myid 信息字段,选举出 myid 较大的服务器作为 Leader 服务器。

每轮投票过后,ZooKeeper 服务都会统计集群中服务器的投票结果,判断是否有过半数的机器投出一样的信息。

如果存在过半数投票信息指向的服务器,那么该台服务器就被选举为 Leader 服务器。

当 ZooKeeper 集群选举出 Leader 服务器后,ZooKeeper 集群中的服务器就开始更新自己的角色信息。

除被选举成 Leader 的服务器之外,其他集群中的服务器角色变更为 Following。