Zookeeper -选举流程

在这里插入图片描述

Leader

集群中同一时间只有一个 Leader。所有写操作必须要通过 Leader 完成,由 Leader 将写操作广播给 Follower

Follower

集群中可以存在多个 Follower,可直接处理并返回客户端的读请求,同时会将写请求转发给 Leader 处理,并且负责在 Leader 处理写请求时对请求进行投票

Observer

功能与 Follower 类似,但无投票权

服务器状态

Leading

领导者状态,表明当前服务器角色是 Leader

Following

跟随者专题,表明当前服务器角色是 Follower

Observing

观察者状态,表明当前服务器角色是 Observer

Looking

寻找 Leader 状态,当服务器处于该状态时,它会认为当前集群中没有 Leader,一次会进入 Leader 选举状态

投票信息

选举状态 ZabState

election 选举
discovery 发现
synchronization 同步
broadcast 广播

基础信息

leader:被选举的 Leader 的 SID
zxid:被选举的 Leader 的事务 ID
sid:当前服务器的 SID
electionEpoch:当前投票的轮次peerEoch:当前服务器投票的 Leader 的 Epoch

选举规则

Epoch > Zxid > Sid

选举终止条件

当某一选票数占集群中参与竞选节点数量的一半以上,选举结束

选举流程

在这里插入图片描述
初始选票都是选自己

约定信息

票箱信息

sid,leader
保存选举的服务器 SID 及 被选举的服务器的 SID

选票信息

electionEpoch,leader,zxid
选举轮次、被选举服务器的 SID,被选举服务器的 zxid

几种场景

  1. 初始
  2. Follower 重启
  3. Leader 宕机

源码

在这里插入图片描述
在这里插入图片描述
此类使用 TCP 实现了用于领导者选举的连接管理器。 它为每对服务器维护一个连接。 棘手的部分是确保每对运行正常且可以通过网络进行通信的服务器都只有一个连接。 如果两台服务器同时尝试开始连接,则连接管理器会使用一种非常简单的打破平局机制,根据双方的 IP 地址来决定丢弃哪个连接。 对于每个对等点,管理器维护一个要发送的消息队列。 如果与任何特定对等方的连接断开,则发送方线程会将消息放回列表中。 由于此实现当前使用队列实现来维护要发送到另一个对等方的消息,因此我们将消息添加到队列的尾部,从而更改消息的顺序。 虽然这对于leader选举来说不是问题,但在巩固peer通信时可能会出现问题。 不过,这有待验证。
在这里插入图片描述
在这里插入图片描述


版权声明:本文为coderknock原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。