Apache Doris 里的 Quorum 协议详解

一、基础定义

Quorum(仲裁/过半协议) 是分布式系统中一套读写一致性规则,核心思想:

分布式多副本集群,读写操作不需要等待所有副本完成,只需要等待过半副本成功响应,就认为操作生效;既保证数据一致性,又兼顾性能。

Doris 元数据(FE 集群)、底层存储数据(BE 副本)都基于这套机制做日志同步与故障容错。

核心公式(副本数 N)

  • 写 Quorum(成功写入阈值):W = floor(N/2) + 1(过半)
  • 读 Quorum(合法读取阈值):R = N - W + 1
    满足 W + R > N,保证读到的数据一定包含最新写入版本,不会出现读写冲突。

二、举 Doris 最常见场景:3副本(N=3)

  1. 写 Quorum W = 2
    写入数据/元数据日志时,只要2个副本落盘成功,就返回客户端成功;剩余1个副本后台异步同步。
  2. 读 Quorum R = 2
    查询时读取至少2个副本数据,取版本最新的结果;保证不会读到过期脏数据。

容错能力:3副本最多允许1台节点故障,集群依然正常读写。

5副本场景拓展

W=3,R=3,最多容忍2台节点宕机。

三、Doris 两个层面如何使用 Quorum

1. FE 元数据集群(Master-Follower 元日志同步)

FE 保存库表分区、表结构、分区信息等元数据,采用多 FE 副本:

  1. Master FE 接收元数据变更(建表、删分区、修改表结构);
  2. 向所有 Follower FE 发送元操作日志;
  3. 只要过半FE副本持久化日志完成(Quorum达成),才提交元事务、对外可见;
  4. Master 宕机时,剩余过半FE可重新选举新Master,保证元数据不丢失。

2. BE 数据分片多副本(数据文件 + 增量日志)

Doris 表数据分片(Tablet)默认3副本,写入流程:

  1. 数据写入目标Tablet所有副本;
  2. 等待Quorum数量副本写完WAL日志,向客户端返回导入成功;
  3. 未同步完成的副本后台追赶日志,最终数据一致;
  4. 查询时读取R个副本比对版本,返回最新数据。

四、Quorum 解决的核心问题

  1. 一致性W+R>N 机制,保证读一定能读到最新提交的数据,不会出现数据不一致;
  2. 可用性:不用等待全部副本完成,少量节点宕机不阻塞读写;
  3. 容错:最多允许 N-W 台节点故障,故障节点恢复后自动同步缺失日志;
  4. 性能平衡:相比等待全副本写入,大幅降低导入/元操作延迟。

五、和Paxos/Raft的关系(容易混淆)

  • Raft、Paxos 是完整分布式共识算法,包含选举、日志复制、安全性一整套逻辑;
  • Quorum 是它们底层通用的过半仲裁思想,是共识算法里的核心规则子集。

Apache Doris FE 元集群底层是简化版 Raft,BE 副本同步同样基于 Quorum 日志复制逻辑,二者都依赖 Quorum 协议保证多副本安全。

六、一句话总结

Quorum 协议就是分布式多副本的过半仲裁机制:写入过半副本成功即生效、读取过半副本保证最新,让 Doris 在多副本存储下同时实现数据强一致与高可用。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐