前言

首先明确一点,FE 只有两种角色:FollowerObserver
而 Master 只是一组 Follower 节点中选择出来的一个 FE。Master 可以看成是一种特殊的 Follower。所以当我们被问及一个集群有多少 FE,都是什么角色时,正确的回答当时应该是所有 FE 节点的个数,以及 Follower 角色的个数和 Observer 角色的个数。 所有 Follower 角色的 FE 节点会组成一个可选择组,类似 Poxas 一致性协议里的组概念。组内会选举出一个 Follower 作为 Master。当 Master 挂了,会自动选择新的 Follower 作为 Master。而 Observer 不会参与选举,因此 Observer 也不会称为 Master 。 一条元数据日志需要在多数 Follower 节点写入成功,才算成功。比如3个 FE ,2个写入成功才可以。这也是为什么 Follower 角色的个数需要是奇数的原因。 Observer 角色和这个单词的含义一样,仅仅作为观察者来同步已经成功写入的元数据日志,并且提供元数据读服务。

对于 Apache Doris 中的 Observer 角色,它不会参与 Leader(Master)选举。这是因为它在集群中的角色设计就是作为只读副本,用于扩展读取能力而不参与到Leader的决策过程中。

角色职责

Master (Leader) 特殊的Follower
  • 职责
  • 是集群中唯一的写入点,负责处理所有的元数据变更操作。
  • 负责生成查询计划,并将任务分发给 BE(Backend)节点进行处理。
  • 管理和协调整个集群的状态。
Follower
  • 职责
  • 同步 Master 的日志并在本地重放以保持元数据的一致性。
  • 可以处理读取请求,特别是在不需要强一致性的场景下。
  • 当 Master 不可用时,Follower 参与新的 Master 选举。
  • 特点
  • Follower 不会接收来自客户端的直接写入请求。
Observer
  • 职责
  • 类似于 Follower,同步 Master 的日志并保持元数据的一致性。
  • 主要用于扩展读取能力,可以独立处理读取请求,减轻 Master 和 Follower 的负担。
  • 特点
  • 不参与任何类型的投票或选举过程,因此它不会成为新的 Master 或影响选举结果。
  • 它的存在主要是为了提高集群的读取能力和容错性,即使 Observer 节点失败,也不会影响到 Master 的选举或者集群的整体功能。

Leader选举

当现有的 Master 发生故障时,集群中的 Follower 将根据一定的算法(通常是Paxos或Raft等一致性算法)来进行新一轮的选举,以选出一个新的 Master。这个过程中,只有 Follower 参与投票,而 Observer 不会参与其中。