【Doris基础】Doris中的Replica详解:Replica原理、架构

发布于:2025-06-01 ⋅ 阅读:(25) ⋅ 点赞:(0)

目录

1 Replica基础概念

1.1 什么是Replica

1.2 Doris中的副本类型

2 Doris副本架构设计

2.1 副本分布机制

2.2 副本一致性模型

3 副本生命周期管理

3.1 副本创建流程

3.2 副本恢复机制

4 副本读写流程详解

4.1 写入流程与副本同步

4.2 查询流程与副本选择

5 副本均衡与调度

5.1 副本均衡策略

5.2 调度器工作原理

6 高级副本管理

6.1 副本放置策略(Placement Policy)

6.2 动态调整副本数

7 总结


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集群调优的关键环节。

网站公告

今日签到

点亮在社区的每一天
去签到