目录
1 Replica基础概念
1.1 什么是Replica
在分布式数据库系统中,Replica(副本)是指同一份数据在不同节点上的多个拷贝。Apache Doris作为一个MPP架构的分析型数据库,通过多副本机制来实现数据的高可用和负载均衡。
副本的核心价值:
- 数据可靠性:防止单点故障导致数据丢失
- 服务可用性:即使部分节点失效,系统仍可提供服务
- 查询性能:多个副本可以分担查询负载
- 弹性扩展:通过增加副本来提升系统吞吐量
1.2 Doris中的副本类型
Doris支持两种类型的副本:普通副本(Normal Replica):
- 完整存储数据分片(Tablet)的所有数据
- 参与数据导入和查询
- 可以投票选举Leader
影子副本(Shadow Replica):
- 仅用于紧急情况下的故障恢复
- 不参与日常的数据服务
- 不参与Leader选举
2 Doris副本架构设计
2.1 副本分布机制
Doris采用分片(Tablet)作为数据分布的基本单位,每个Tablet会有多个副本分布在不同的节点上。副本分布遵循以下原则:
- 节点级容错:同一Tablet的不同副本必须分布在不同的BE节点上
- 机架感知(如果配置):优先跨机架分布副本
- 存储介质平衡:考虑不同存储介质的均衡使用

2.2 副本一致性模型
Doris采用多副本强一致性模型,基于Raft协议实现。关键特性包括:
- Leader-Follower模型:每个Tablet的多个副本中有一个Leader,其余为Follower
- 写入路径:所有写入必须通过Leader,成功后同步到多数Follower才算成功
- 读取路径:默认从Leader读取,也可配置为从Follower读取(最终一致性)
Raft协议在Doris中的实现特点:
- 优化了批量提交机制,提高吞吐量
- 支持配置异步提交模式(牺牲部分一致性换取性能)
- 心跳和选举超时时间可配置
3 副本生命周期管理
3.1 副本创建流程
当创建新表或添加分区时,Doris会触发副本创建过程:

- FE选择目标BE节点并发送创建请求
- 各BE创建本地Tablet数据目录和元数据
- FE协调发起Leader选举
- 新Leader上报FE,完成副本创建
3.2 副本恢复机制
当检测到副本不可用(如BE宕机)时,Doris会自动触发副本恢复:
- 检测阶段:FE通过心跳检测副本状态
- 决策阶段:确定需要恢复的Tablet和副本
- 调度阶段:选择目标BE并触发副本克隆
- 同步阶段:从健康副本同步数据
- 生效阶段:新副本加入组,更新元数据
关键参数:
- tablet_checker_interval_ms:副本检查间隔
- tablet_sched_slot_num_per_path:每个磁盘路径的恢复并发数
- replica_sync_rpc_timeout_ms:副本同步RPC超时时间
4 副本读写流程详解
4.1 写入流程与副本同步

- Client发送写入请求到FE
- FE路由到对应Tablet的Leader BE
- Leader将数据写入本地WAL(Write Ahead Log)
- Leader并行发送日志到所有Follower
- 等待多数副本(包括Leader)持久化成功
- Leader提交写入,返回客户端成功
写入优化技术:
- 批量提交:积累多个操作一次性提交
- 流水线:下一批写入不等待上一批提交完成
- 并行发送:并发向多个Follower发送数据
4.2 查询流程与副本选择
Doris的查询副本选择策略:

策略说明:
- Leader优先:默认策略,总是选择Leader保证强一致性
- 本地优先:优先选择与计算节点同机的副本
- 轮询调度:均匀分散查询负载
- 随机选择:简单无状态的分配方式
- 可通过prefer_replica参数配置策略:
SET prefer_replica = 'local'; -- 本地优先
5 副本均衡与调度
5.1 副本均衡策略
Doris通过内置的Tablet调度器维持集群均衡:

均衡维度:
- 节点间副本数均衡:确保各BE的副本数量相近
- 磁盘空间均衡:防止单个磁盘过满
- 标签均衡:考虑机架、机房等容灾属性
- 存储介质均衡:平衡SSD和HDD的使用
5.2 调度器工作原理
Doris的副本调度器主要组件:
- Collector:收集集群Tablet和副本状态
- Analyzer:分析需要调度的Tablet
- Scheduler:生成调度任务并执行
- Checker:检查调度结果
- 关键配置参数:
# 调度器运行间隔
tablet_sched_interval_ms=1000
# 均衡策略
enable_balance=true
balance_load_score_threshold=0.1
# 并发控制
tablet_sched_max_scheduling_tablets=1024
tablet_sched_slot_num_per_path=2
6 高级副本管理
6.1 副本放置策略(Placement Policy)
Doris支持通过SQL定义副本放置规则:
-- 创建具有副本放置策略的资源
CREATE RESOURCE resource_name
PROPERTIES (
"replication_num" = "3",
"tag.location" = "zone1:rack1:be1,zone1:rack2:be2,zone2:rack1:be3"
);
-- 应用资源到表
CREATE TABLE db1.table1 (
k1 INT,
k2 VARCHAR(32)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES (
"replication_allocation" = "resource_name"
);
策略优势:
- 实现跨机架、跨机房部署
- 满足数据本地化要求
- 符合合规性要求(如数据不出域)
6.2 动态调整副本数
Doris支持在线修改表的副本数:
ALTER TABLE db1.table1 SET ("replication_num" = "3");
执行流程:
- FE更新元数据中的目标副本数
- Tablet调度器检测到差异
- 调度器创建增加/删除副本任务
- 逐步调整直到满足新副本数要求
注意事项:
- 增加副本会占用更多存储和网络资源
- 减少副本可能暂时降低可用性
- 大规模调整建议在低峰期进行
7 总结
Doris的副本管理系统是其高可用和高性能的基石。通过深入理解副本的创建、同步、恢复和均衡机制,管理员可以更好地规划集群部署、优化性能参数,并有效处理各种异常情况。合理的副本配置不仅能保障数据安全,还能显著提升查询性能,是Doris集群调优的关键环节。