Apache Doris【理论篇】02:Apache Doris 里的 Quorum 协议详解
·
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)
- 写 Quorum W = 2
写入数据/元数据日志时,只要2个副本落盘成功,就返回客户端成功;剩余1个副本后台异步同步。 - 读 Quorum R = 2
查询时读取至少2个副本数据,取版本最新的结果;保证不会读到过期脏数据。
容错能力:3副本最多允许1台节点故障,集群依然正常读写。
5副本场景拓展
W=3,R=3,最多容忍2台节点宕机。
三、Doris 两个层面如何使用 Quorum
1. FE 元数据集群(Master-Follower 元日志同步)
FE 保存库表分区、表结构、分区信息等元数据,采用多 FE 副本:
- Master FE 接收元数据变更(建表、删分区、修改表结构);
- 向所有 Follower FE 发送元操作日志;
- 只要过半FE副本持久化日志完成(Quorum达成),才提交元事务、对外可见;
- Master 宕机时,剩余过半FE可重新选举新Master,保证元数据不丢失。
2. BE 数据分片多副本(数据文件 + 增量日志)
Doris 表数据分片(Tablet)默认3副本,写入流程:
- 数据写入目标Tablet所有副本;
- 等待Quorum数量副本写完WAL日志,向客户端返回导入成功;
- 未同步完成的副本后台追赶日志,最终数据一致;
- 查询时读取R个副本比对版本,返回最新数据。
四、Quorum 解决的核心问题
- 一致性:
W+R>N机制,保证读一定能读到最新提交的数据,不会出现数据不一致; - 可用性:不用等待全部副本完成,少量节点宕机不阻塞读写;
- 容错:最多允许
N-W台节点故障,故障节点恢复后自动同步缺失日志; - 性能平衡:相比等待全副本写入,大幅降低导入/元操作延迟。
五、和Paxos/Raft的关系(容易混淆)
- Raft、Paxos 是完整分布式共识算法,包含选举、日志复制、安全性一整套逻辑;
- Quorum 是它们底层通用的过半仲裁思想,是共识算法里的核心规则子集。
Apache Doris FE 元集群底层是简化版 Raft,BE 副本同步同样基于 Quorum 日志复制逻辑,二者都依赖 Quorum 协议保证多副本安全。
六、一句话总结
Quorum 协议就是分布式多副本的过半仲裁机制:写入过半副本成功即生效、读取过半副本保证最新,让 Doris 在多副本存储下同时实现数据强一致与高可用。
更多推荐

所有评论(0)