0
0
0
0
博客/.../

第二课-TiDB的PCTA考试认证学习笔记(Lesson 04)

 TiDB_001  发表于  2026-05-26

PCTA学习笔记,依据官方文档和官方提供的视频进行整理的。

今天学习,TiDB数据库的架构,Lesson 04

官方文档:https://pingkai.cn/docs/tidb/stable/tidb-computing

PCTA必学课程:101-TiDB 数据库核心原理与架构:https://learn.pingkai.cn/learner/course/1290025

一、Module 01:TiDB数据库架构

1 Lesson 04: PD (Placement Driver)

1.1 PD 的架构

1.1.1 组件角色与功能

1)PD (Placement Driver) 集群

  • 元数据管理:整个集群的“大脑”,存储集群的元数据,如 Region 的分布、拓扑信息。
  • 调度中心:负责 TiKV 节点间的负载均衡、Region 分裂/合并、Raft 组 Leader 调度。
  • 分布式一致性:自身通过 Raft 协议组成集群,保证 PD 元数据的高可用,图中标 * 的为 Leader 节点。
  • 全局时间戳( TSO)分配:为分布式事务分配全局单调递增的时间戳,支持多版本并发控制(MVCC)。
  • PD 默认部署 3 个节点,构成一个高可用集群

2)TiKV 存储集群

  • 数据持久化层:负责实际数据的存储,采用 Key-Value 引擎。

  • Region 数据分片

    • 数据按 Key 范围被切分为多个 Region(默认 96MB)。
    • 每个 Region 是一个 Raft Group,包含 3 个副本(Leader + 多个 Follower),分布在不同 TiKV 节点上。
    • Leader:处理读写请求,与 Follower 同步日志。
    • Follower:被动同步数据,故障时可被选举为 Leader。
  • Peer

    • Peer:Region 的副本也被称为 Peer。
    • 每个 Region 默认包含 3 个 Peer(副本),分布在不同的 TiKV 节点上,通过 Raft 协议保证数据一致性。
    • 其中一个 Peer 为 Leader,负责处理读写请求;其余为 Follower,被动同步数据,故障时可被选举为新的 Leader。
  • Store:每个 TiKV 节点就是一个 Store,承载多个 Region 副本。

1.1.2 架构工作流程

  1. 用户请求:客户端连接 TiDB Server,发送 SQL 请求。
  2. 路由查询:TiDB Server 向 PD 查询所需数据所在的 Region Leader 位置。
  3. 读写操作:TiDB 直接与对应的 TiKV 节点上的 Region Leader 交互,执行读写操作。
  4. 副本同步:Region Leader 通过 Raft 协议将日志同步给 Follower,保证数据一致性。
  5. PD 调度:PD 持续监控集群状态,自动调整 Region 分布、负载均衡和故障恢复。

1.1.3 关键特性

  • 水平扩展:TiDB、TiKV、PD 均可按需扩展。
  • 高可用:Region 三副本 + PD 集群保证服务不中断。
  • 强一致性:基于 Raft 协议实现数据的强一致性。
  • 自动负载均衡:PD 自动调度 Region,实现数据和读写负载的均衡分布。

1.2 PD主要功能

PD 是 TiDB 集群的元数据管理和全局调度中心,核心功能包括:

  • 整个集群 TiKV 的元数据存储 记录所有 TiKV 节点、Region 分布、副本位置等关键信息,是 TiDB 查询数据路由的依据。
  • 分配全局 ID 和事务 ID 为集群中的数据对象(如表、索引)和事务提供全局唯一的 ID,保证分布式环境下的标识唯一性。
  • 生成全局时间戳 TSO 提供全局单调递增的时间戳服务,用于分布式事务的 MVCC(多版本并发控制),保障事务一致性。
  • 收集集群信息进行调度 持续监控 TiKV 节点状态、负载情况,自动进行 Region 分裂/合并、负载均衡、故障恢复等调度操作。
  • 提供 Label,支持高可用 通过节点 Label 实现机房、机架级别的副本分布策略,例如跨机房部署,提升集群容灾能力。
  • 提供 TiDB Dashboard 内置集群监控面板,提供节点状态、Region 分布、性能指标、慢查询等可视化监控功能。

1.3 路由功能

1.2.1 核心组件

  • TiDB Server:SQL 层入口,包含 Executor 执行器和 TiKV Client 客户端
  • TiKV Client:内嵌在 TiDB 中的客户端,负责与 TiKV 通信,内部维护 Region Cache
  • Region Cache:缓存 Key 到 Region Leader 的路由信息,是路由功能的关键,无需每次都向 PD 发起查询,大幅降低路由开销。
  • PD (Placement Driver):集群元数据中心,存储所有 Region 的分布信息
  • TiKV:数据存储层,实际存放 Region 数据

1.2.2 路由流程

  1. SQL 执行请求 用户发送 SQL 后,Executor 执行计划需要访问具体数据,会向 TiKV Client 发起请求。

  2. 本地缓存查询 TiKV Client 首先在 Region Cache 中查找 Key 对应的 Region 及其 Leader 节点位置。

    • 命中:直接向对应的 TiKV 节点发送读写请求(蓝色箭头)
    • 未命中/缓存失效:向 PD 发起 Locate Region 请求(绿色虚线箭头)
  3. PD 元数据查询 PD 返回该 Key 所在的 Region 信息及当前 Leader 节点地址。

  4. 更新缓存并访问 TiKV Client 更新 Region Cache,然后向目标 TiKV 节点发送读写请求(蓝色箭头)。

  5. TiKV 响应 TiKV 节点处理请求后,将结果返回给 TiKV Client,再由 TiDB 整理返回给用户(红色箭头)。

1.2.3 关键机制说明

  • Region Cache 作用: 避免每次请求都查询 PD,大幅提升路由性能,是 TiDB 高性能的关键优化。

  • 缓存更新时机

    • 首次访问 Key
    • Region 发生分裂/合并
    • Region Leader 发生迁移 这些场景下缓存会失效,TiKV Client 会重新向 PD 查询并更新缓存。

1.4 TSO的分配

1.4.1 TSO的分配

  • TSO(physical time logical time) = 物理时间 + 逻辑时间

    • 高位:真实物理时间
    • 低位:逻辑时间,1毫秒可拆分出262144个TSO
  • 存储类型:int64整型

1.4.2 TSO分配过程

  • 触发时机 SQL执行初始阶段申请TSO,事务开启、提交阶段均会发起TSO请求。
  • 执行时序 节点4、5操作存在先后等待关系;2与4、3与5两组流程异步并行执行。
  • 批量请求优化 SQL并发量大、TSO请求频繁,PD Client不会单次单请求上报。 设定时间阈值(如5毫秒),周期内积攒所有请求后批量统一提交至PD;周期内仅单个请求也正常发起上报。

1) 核心组件

  • TSO 请求者:TiDB Server 中需要获取全局时间戳的模块(如事务模块)
  • PD Client:TiDB Server 内嵌的 PD 客户端,负责与 PD Leader 通信
  • PD (Leader):集群中负责生成全局 TSO 的主节点,通过 Raft 协议保证高可用

2)分配流程

  1. 发起请求:TSO 请求者向 PD Client 发起获取 TSO 的请求。
  2. 异步 Future 返回:PD Client 立即返回一个 tsFuture 对象,请求者无需阻塞等待。
  3. 后台异步请求:PD Client 在后台向 PD Leader 发起 TSO 请求。
  4. 业务并行处理:在等待 PD 响应的同时,TSO 请求者可以继续执行 SQL 的解析、编译等任务。
  5. PD 分配 TSO:PD Leader 收到请求后,生成全局唯一且单调递增的时间戳,返回给 PD Client。
  6. 获取 TSO:PD Client 收到响应后,将结果填入 tsFuture。请求者通过 tsFuture.wait() 获取最终的 TSO。

3)关键优化点

  • 异步请求 + Future 模式:通过异步请求和 Future 对象,将 TSO 获取过程与 SQL 解析编译并行化,有效降低了 TSO 调用的延迟。
  • PD Leader 高可用:PD 集群通过 Raft 协议保证 TSO 服务的高可用,主节点故障时可快速切换,不影响服务。

1.4.3 TSO分配:时间窗口

1)性能瓶颈解决

TiDB Server 会持续发送大量 TSO 请求,若每个请求都直接落地到 PD 持久化存储,会产生频繁磁盘 IO,影响系统吞吐量,PD Leader 为了提升 TSO 分配的吞吐量(解决性能瓶颈),会采用批量分配时间窗口的优化方式,而不是每个请求都单独处理。

  1. 批量预分配:PD Leader 一次性分配一段较长时间窗口内的 TSO(如 3 秒),缓存到内存中供 TiDB Server 使用。
  2. 队列消费:TiDB Server 的请求按顺序从 PD 的缓存中获取 TSO,无需每次都访问磁盘。
  3. 周期更新:当缓存中的 TSO 即将耗尽时,PD 再批量向磁盘写入新的 TSO 区间(如从 703 更新到 706),将磁盘 IO 频率降低到 3 秒 1 次。

2)PD Server 高可用与故障恢复

  • 状态同步:Leader 分配的 TSO 区间(如 703-706)会通过 Raft 协议同步给所有 Follower PD 节点,保证集群状态一致。

  • Leader 故障场景

    1. 假设原 Leader 在缓存中分配到 704 时宕机,此时磁盘中已同步的最大分配记录是 706。
    2. 新的 Leader 节点无法感知原 Leader 内存中已分配到 704 的状态,只会基于磁盘记录的最大值 706,继续分配新的区间 706-709。
  • 关键结论

    • 这种机制能严格保证 TSO 的全局唯一性,不会出现重复,满足分布式事务的核心要求。
    • 无法保证 TSO 的连续性,上述场景中 704-705 这两个序号会永久丢失,形成空洞。

3)工作流程(结合图中示例)

  1. 批量请求:多个 TiDB 客户端同时向 PD 发送 TSO 请求。

  2. 时间窗口分配:PD 收到请求后,不是逐个处理,而是为这一批请求分配一个连续的时间窗口。

    • 例如,PD 当前时间戳为 700,为这 3 个请求分配了从 700703 的时间窗口。
  3. 原子性更新:PD 将时间窗口的起始值 700 和数量 3 写入持久化存储,然后一次性返回给所有客户端。

  4. 客户端获取 TSO:每个客户端根据请求在批次中的顺序,从时间窗口中拿到自己的 TSO(如 700701702)。

4)优化效果

  • 降低请求开销:多个客户端请求只需要一次 PD 处理和一次持久化操作,大幅提升了 TSO 服务的吞吐量。
  • 保证全局有序:时间窗口内的 TSO 依然是全局单调递增的,不会出现重复或回退。

1.5 PD的调度原理

1.5.1 PD 调度:总流程

1) 流程概述

PD 的调度过程分为三个核心阶段:信息收集 → 生成调度 → 执行调度。

2)阶段详解

  1. 信息收集 PD 持续从所有 TiKV 节点采集关键信息,包括:

    • 节点状态(在线/离线、负载情况)
    • Region 分布与副本状态
    • 磁盘使用、读写流量等指标 这些数据是后续调度决策的基础。
  2. 生成调度 PD 根据预设的调度策略和收集到的信息,分析集群当前是否存在问题,例如:

    • 节点负载不均(热点 Region)
    • 副本分布不符合高可用策略(如同机房副本过多)
    • 节点故障导致副本缺失 PD 会生成对应的调度算子(如 Region 迁移、Leader 转移、副本添加/删除)。
  3. 执行调度 PD 将生成的调度指令下发给目标 TiKV 节点执行,例如:

    • 指示某 TiKV 将一个 Region 的副本迁移到另一个节点
    • 指示某 TiKV 将一个 Region 的 Leader 角色转移给其 Follower 执行过程中,PD 会监控状态,确保调度成功完成。

1.5.2 PD 调度:信息收集

1) 核心机制

PD 通过两类心跳机制,从 TiKV 节点持续收集集群状态数据,为后续调度提供依据。

2) 两类心跳

  1. Store Heartbeat(节点心跳)

    • 由每个 TiKV 节点定期向 PD 发送。

    • 上报节点级别的状态信息,如:

      • 节点在线状态
      • 磁盘容量、使用情况
      • CPU、内存、读写负载
      • 节点标签(Label)信息
    • 作用:让 PD 了解每个节点的健康状况和负载能力。

  2. Region Heartbeat(Region 心跳)

    • 由每个 Region 的 Leader 副本定期向 PD 发送。

    • 上报 Region 级别的状态信息,如:

      • Region 当前的 Leader、Follower 分布位置
      • Region 的数据大小、读写流量
      • 副本健康状态(是否同步)
    • 作用:让 PD 掌握每个数据分片的分布和状态,是 Region 调度的基础。

3)工作流程

  • 每个 TiKV 节点会同时发送 Store Heartbeat 和其所有 Leader Region 的 Region Heartbeat 给 PD。
  • PD 汇总这些信息,构建出整个集群的实时状态视图。
  • 后续的调度决策(如负载均衡、故障恢复)都基于这些心跳数据生成。

1.5.3 PD 调度:生成调度

1)调度策略分类

PD 根据收集到的集群信息,会生成多种类型的调度任务,主要包括以下几类:

2)3.8.2 各类调度策略详解

  • Balance(负载均衡)

    • Leader Balance:将 Region 的 Leader 副本均匀分布到各个 TiKV 节点,平衡节点的读写负载。
    • Region Balance:将 Region 副本均匀分布,平衡节点的磁盘存储和数据分布。
  • Hot Region(热点 Region 调度)

    • 识别读写压力过大的热点 Region,通过迁移 Leader 或副本,将负载分散到其他节点,避免单节点瓶颈。
  • 集群拓扑调度

    • 根据节点的标签(如机房、机架),调整副本分布,确保副本跨机房/机架部署,提升集群容灾能力。
  • 缩容调度

    • 当需要下线 TiKV 节点时,自动将该节点上的所有 Region 副本迁移到其他节点,确保数据安全,实现平滑缩容。
  • 故障恢复调度

    • 当节点宕机或副本丢失时,自动生成调度任务,补充副本或重新选举 Leader,确保副本数符合配置要求,维持集群高可用。
  • Region merge(Region 合并)

    • 将多个连续的小 Region 合并为一个大 Region,减少元数据开销和调度压力,提升整体性能。

1.5.4 PD 调度:执行调度

1)核心流程

PD 生成调度任务后,会通过下发 operator 的方式,驱动 TiKV 节点完成实际的调度动作。

2)调度执行过程

  1. 下发 Operator PD 将生成的调度指令(Operator)发送给目标 TiKV 节点,如图中所示,PD 向 TiKV Node 1 下发指令。

    • Operator 描述了具体的调度动作,如:

      • 将某个 Region 的 Leader 迁移到指定节点
      • 为某个 Region 添加/删除副本
      • 合并/分裂 Region
  2. TiKV 执行调度 TiKV 节点收到 Operator 后,会执行相应的操作:

    • Leader 迁移:将 Region 的 Leader 角色转移到指定节点。
    • 副本迁移:将 Region 数据从当前节点复制到目标节点,同步完成后删除本地副本。
    • 故障恢复:补充缺失的副本,确保副本数符合配置。
  3. 状态反馈 调度执行过程中,TiKV 会通过心跳机制向 PD 报告进度和状态。PD 监控调度过程,若执行失败会进行重试或调整策略。

3)关键特点

  • 异步执行:PD 下发指令后无需等待,调度在 TiKV 节点后台异步执行,不影响集群业务。
  • 安全可靠:所有调度动作都基于 Raft 协议保证数据一致性,迁移过程中不影响服务可用性。

1.6 label的作用

1.6.1 label 和高可用性

  • 层级定义:DC代表独立数据中心,RACK代表机柜,TiKV代表物理主机。

    • Region 1风险:3副本中有2个集中在同一机柜(如Rack4),当该机柜或所属数据中心(DC2)故障时,2个副本同时失效,仅剩1个副本,不满足多数派要求,集群无法正常读写。
    • Region 2风险:副本集中部署在同一数据中心(DC1),当该数据中心整体故障时,所有副本同时失效,数据完全不可用。
    • Region 3最优实践:副本分布在独立的DC、RACK和TiKV节点中,单个数据中心、机柜或主机故障时,最多仅损失1个副本,剩余副本仍能满足多数派要求,稳定性最高。

1)核心原理

TiDB 使用 Label(标签) 来定义物理拓扑层级(如数据中心、机架、机器),PD 基于这些标签实现跨层级的副本分布策略,保障集群高可用。

2)拓扑层级(结合图示)

图中展示了典型的三层拓扑结构:

  1. DC(数据中心):最高层级,如 DC 1、DC 2、DC 3。
  2. Rack(机架):每个数据中心下的机架,如 Rack 1、Rack 2。
  3. TiKV 节点:每个机架下的物理服务器,如 TiKV-1、TiKV-2。

3) Label 调度策略

PD 会根据配置的 Label 规则,确保每个 Region 的副本分布在不同的故障域中:

  • 跨 DC 分布:同一个 Region 的副本分布在不同数据中心(如 Region 1 的副本在 DC 2 和 DC 3),防止单个数据中心故障导致数据不可用。
  • 跨 Rack 分布:同一数据中心内,副本分布在不同机架(如 Region 2 的副本在 DC 1 的 Rack 1 和 Rack 2),防止单机架故障影响服务。
  • Leader 分布优化:PD 会尽量将 Region Leader 分散在不同节点和机架上,平衡读写负载,避免热点。

4)高可用效果

  • 故障域隔离:单个 DC、Rack 或节点故障时,只要还有多数副本存活,集群就能正常提供服务。
  • 自动恢复:PD 会持续监控副本分布,一旦发现副本分布不符合 Label 策略,会自动生成调度任务,将副本迁移到合适的节点,维持高可用状态。

1.6.2 label 的配置

1)配置原理

TiDB 的 Label 配置分为两部分:TiKV 节点标签配置PD 副本分布策略配置,两者配合实现跨故障域的高可用部署。

2)TiKV 节点 Label 配置

在 TiKV 配置文件中,通过 server.labels 参数为每个节点打上物理拓扑标签,示例如下:

# TiKV-1 (DC 1, Rack 1)
server.labels: { zone: "1", rack: "1", host: "1" }
​
# TiKV-3 (DC 1, Rack 2)
server.labels: { zone: "1", rack: "2", host: "3" }
​
  • zone:数据中心 / 机房层级标签。
  • rack:机架层级标签。
  • host:物理主机层级标签。

3)PD 副本分布策略配置

在 PD 配置文件中,通过以下参数定义副本分布规则:

location-labels = ["zone", "rack", "host"]
[replication]
isolation-level = "zone"
  • location-labels:指定参与副本分布策略的标签层级顺序(从高到低)。
  • isolation-level:设置副本分布的故障域隔离级别。示例中 isolation-level = "zone" 表示 PD 会确保同一个 Region 的副本分布在不同的 zone(数据中心)中,防止单数据中心故障导致数据不可用。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论