ZooKeeper 技术内幕|Leader 选举是一个什么样的过程

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

几个问题引发思考

  1. 什么时候 leader 选举

  2. 选举的过程

  3. 选举过程中是否能提供服务

  4. 选举结果是否会丢失数据

服务器角色

2 个小问题

  1. 服务器节点有多少角色

  2. 每个角色的作用

角色

ZK 集群中服务器节点有 3 中角色

  1. LeaderZK 集群工作机制的核心主要工作

    • 调度者集群内部各个服务节点的调度者

    • 事务请求事务请求的唯一调度和处理者保证集群事务处理的顺序性

  2. Follower主要职责

    • 非事务请求Follower 直接处理非事务请求对于事务请求转发给 Leader

    • Proposal 投票Leader 上执行事务时需要 Follower 投票Leader 才真正执行

    • Leader 选举投票

  3. ObserverZK 3.3.0+ 版本开始引入提升 ZK 集群的非事务处理能力主要职责

    • 非事务请求Follower 直接处理非事务请求对于事务请求转发给 Leader

特别说明Observer 跟 Follower 的唯一区别

  1. Follower 参与投票Leader 选举、Proposal 提议投票事务执行确认

  2. Observer 不参与投票只用于提供非事务请求的处理

疑问节点成为 Follower 还是 Observer 是 配置文件中设定的

Leader 选举

2 个小问题

  1. 什么时候进行 Leader 选举

  2. Leader 选举的具体过程是什么

时机

下面任何一种情况都会触发 Leader 选举

  1. 启动时集群服务器刚启动

  2. 运行时Leader 崩溃

服务器的状态流转

过程

Leader 选举过程本质就是广播优先级消息的过程选出数据最新的服务节点选出优先级最高的服务节点基本步骤

  1. 各个服务器节点广播自己的优先级标识 (sidzxid)

  2. 服务器节点收到其他广播消息后跟自己的优先级对比自己优先级低则变更当前节点投票的优先级(sidzxid) 并广播变更后的结果

  3. 当任意一个服务器节点收到的投票数超过了法定数量(quorum)则升级为 Leader并广播结果。

疑问法定数量quorum一般设置为集群规模大小的半数以上quorum 在哪配置的

特别说明

  1. 服务器节点的优先级标识(sidzxid)

  2. 优先比较 zxid 事务 ID其次比较sid服务器ID

  3. sid (服务器 ID) 是节点配置文件中设定的

  4. 当前服务器上的 zxid 是什么时候设定的是在 Leader 执行事务过程中向当前服务器同步的如何活的当前服务器上的 zxid

具体选举过程

补充说明

  1. 由于网络延时节点得不到足够多广播信息时会做出错误的投票判断纠正过程更耗时

  2. 选举过程中服务器节点会等待一定时间再广播投票信息时间间隔一般设定为 200 ms

  3. 上面 Leader 选举采取事件触发 Push 方式 广播消息称为 快速 Leader 选举因为之前的 Leader 选举采用 Pull 方式每隔 1s 拉取一次。

疑问

服务器节点等待 200ms 的起始时间点是什么是收到一轮新投票消息开始计时

RE

  1. 正常情况下投票信息事件触发广播出去的

  2. 当某个服务器节点判断支持当前节点的投票数量 >= 法定数量quorum则仍然等待 200ms确认是否有更优的投票。

真正的投票信息

属性说明
id被推举 Leader 的 sid
zxid被推举 Leader 的事务ID
electionEpoch投票的轮数约束同一轮投票计数有效
peerEpoch被推举 Leader 的 epoch
state当前服务器的状态

一次 Leader 选举过程属于同一个 electionEpoch结束时会选出新的 Leader服务器节点在比较 (sidzxid) 之前会先比较选举轮次 electionEpoch只有同一轮次的 Leader 投票信息才是有效的

  1. 外部投票轮次 > 内部投票轮次更新内部投票并且触发当前节点投票信息的重新广播

  2. 外部投票轮次 < 内部投票轮次直接忽略当前的外部投票

  3. 外部投票轮次 = 内部投票轮次进一步比较 (sidzxid)

疑问Leader 负责执行所有的事务操作一次事务操作

  1. Leader 如何将事务操作同步到 Follower 和 Observer 同步、异步

  2. 如何保证同步过程中事务一定执行成功事务失败的影响

Leader 上执行的事务状态通过 Zab 状态更新的广播协议更新到 Follower 和 Observer。

附录

分布式系统 Leader 选举脑裂

脑裂split brain服务器集群的 2 个子集能够同时独立选举 Leader并正常运行形成 2 个集群。

解决办法Leader 选举的法定数量quorum超过正常集群的半数。

Leader 选举的必要条件节点数量 > 法定数量

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6