PD (Placement Driver) #

一、PD概述 #

1.1 核心定位 #

PD (Placement Driver) 是 TiDB 集群的大脑,负责全局调度和元数据管理。

text
PD 核心职责
├── 元数据管理
│   ├── 集群拓扑信息
│   ├── Region 信息
│   └── 数据分布信息
│
├── 调度决策
│   ├── Region 调度
│   ├── Leader 调度
│   └── 热点调度
│
├── 时间戳分配
│   ├── TSO 分配
│   ├── 全局唯一
│   └── 单调递增
│
└── 集群管理
    ├── 成员管理
    ├── 配置管理
    └── 故障检测

1.2 架构位置 #

text
PD 在集群中的位置
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                 TiDB Server                         │   │
│   │                                                     │   │
│   │   请求 TSO、获取 Region 位置                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                            │                                │
│                            ▼                                │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                   PD Cluster                        │   │
│   │                                                     │   │
│   │   ┌─────────┐  ┌─────────┐  ┌─────────┐            │   │
│   │   │  PD 1   │  │  PD 2   │  │  PD 3   │            │   │
│   │   │ Leader  │  │Follower │  │Follower │            │   │
│   │   └─────────┘  └─────────┘  └─────────┘            │   │
│   │                                                     │   │
│   │   功能:                                             │   │
│   │   - TSO 分配                                        │   │
│   │   - 元数据存储                                      │   │
│   │   - 调度决策                                        │   │
│   │   - 监控收集                                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                            │                                │
│            ┌───────────────┼───────────────┐                │
│            ▼               ▼               ▼                │
│   ┌───────────────┐ ┌───────────────┐ ┌───────────────┐    │
│   │    TiKV 1     │ │    TiKV 2     │ │    TiKV 3     │    │
│   │               │ │               │ │               │    │
│   │  心跳上报     │ │  心跳上报     │ │  心跳上报     │    │
│   │  接收调度     │ │  接收调度     │ │  接收调度     │    │
│   └───────────────┘ └───────────────┘ └───────────────┘    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.3 高可用设计 #

text
PD 高可用架构
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   PD 集群使用 Raft 协议保证高可用:                          │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   ┌─────────────────────────────────────────────┐   │   │
│   │   │              Raft Group                     │   │   │
│   │   │                                             │   │   │
│   │   │   ┌─────────┐                              │   │   │
│   │   │   │  PD 1   │  Leader                      │   │   │
│   │   │   │         │  - 处理所有请求              │   │   │
│   │   │   │         │  - 执行调度                  │   │   │
│   │   │   └─────────┘                              │   │   │
│   │   │        │                                   │   │   │
│   │   │        │ 复制                              │   │   │
│   │   │        ▼                                   │   │   │
│   │   │   ┌─────────┐  ┌─────────┐                │   │   │
│   │   │   │  PD 2   │  │  PD 3   │  Follower      │   │   │
│   │   │   │         │  │         │  - 同步数据    │   │   │
│   │   │   │         │  │         │  - 等待选举    │   │   │
│   │   │   └─────────┘  └─────────┘                │   │   │
│   │   │                                             │   │   │
│   │   └─────────────────────────────────────────────┘   │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   故障切换:                                                 │
│   - Leader 故障 → Follower 选举新 Leader                   │
│   - 选举时间: 约 3 秒                                       │
│   - 数据不丢失                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

二、元数据管理 #

2.1 集群元数据 #

text
PD 存储的元数据
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 集群信息                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   - 集群 ID                                         │   │
│   │   - 集群版本                                        │   │
│   │   - 全局配置                                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   2. 节点信息                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   TiKV 节点:                                        │   │
│   │   - Store ID                                        │   │
│   │   - 地址                                            │   │
│   │   - 状态 (Up/Down)                                  │   │
│   │   - 容量、已用空间                                  │   │
│   │   - Region 数量、Leader 数量                        │   │
│   │                                                     │   │
│   │   TiDB 节点:                                        │   │
│   │   - 地址                                            │   │
│   │   - 版本                                            │   │
│   │   - 状态                                            │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   3. Region 信息                                            │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   - Region ID                                       │   │
│   │   - Start Key / End Key                             │   │
│   │   - Region Epoch (conf_ver, version)                │   │
│   │   - Peers (副本列表)                                │   │
│   │   - Leader 位置                                     │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.2 Region信息查询 #

sql
-- 查看 Region 信息
SELECT * FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS LIMIT 10;

-- 查看特定表的 Region
SELECT 
    TABLE_NAME,
    REGION_ID,
    START_KEY,
    END_KEY,
    LEADER_STORE_ID
FROM INFORMATION_SCHEMA.TIKV_REGION_STATUS
WHERE TABLE_NAME = 'users';

-- 查看 Store 信息
SELECT * FROM INFORMATION_SCHEMA.TIKV_STORE_STATUS;

2.3 心跳机制 #

text
心跳上报流程
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   TiKV 定期向 PD 发送心跳:                                  │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                    TiKV                             │   │
│   │                                                     │   │
│   │   心跳内容:                                         │   │
│   │   ├── Store 信息                                    │   │
│   │   │   - 容量、已用空间                              │   │
│   │   │   - Region 数量                                 │   │
│   │   │   - Leader 数量                                 │   │
│   │   │   - 读写 QPS                                    │   │
│   │   │                                                 │   │
│   │   └── Region 信息                                   │   │
│   │       - Region ID                                   │   │
│   │       - Leader ID                                   │   │
│   │       - Peers 列表                                  │   │
│   │       - 读写统计                                    │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                          │                                  │
│                          │ 心跳请求                         │
│                          ▼                                  │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                     PD                              │   │
│   │                                                     │   │
│   │   处理心跳:                                         │   │
│   │   1. 更新 Store 状态                                │   │
│   │   2. 更新 Region 元数据                             │   │
│   │   3. 检查是否需要调度                               │   │
│   │   4. 返回调度命令                                   │   │
│   │                                                     │   │
│   │   返回的调度命令:                                   │   │
│   │   ├── 转移 Leader                                   │   │
│   │   ├── 添加副本                                      │   │
│   │   ├── 删除副本                                      │   │
│   │   ├── 分裂 Region                                   │   │
│   │   └── 合并 Region                                   │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   心跳间隔: 默认 10 秒                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

三、TSO时间戳 #

3.1 TSO原理 #

text
TSO (Timestamp Oracle)
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   TSO 是全局唯一、单调递增的时间戳:                         │
│                                                             │
│   结构 (64位):                                              │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                    64 bits                          │   │
│   │   ┌─────────────────────────┬────────────────────┐  │   │
│   │   │    物理时间 (38位)      │   逻辑计数 (16位)  │  │   │
│   │   │                         │                    │  │   │
│   │   │   毫秒级时间戳          │   同一毫秒内计数   │  │   │
│   │   │   (可表示约 174 年)     │   (最多 65536 个)  │  │   │
│   │   └─────────────────────────┴────────────────────┘  │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   示例:                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   物理时间: 1700000000000 ms                        │   │
│   │   逻辑计数: 123                                      │   │
│   │                                                     │   │
│   │   TSO = (1700000000000 << 16) | 123                 │   │
│   │       = 11158821230540808187                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   特点:                                                     │
│   - 全局唯一: 由 PD Leader 统一分配                        │
│   - 单调递增: 保证事务顺序                                 │
│   - 高性能: 内存分配,批量获取                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.2 TSO分配流程 #

text
TSO 分配流程
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   TiDB Server                                               │
│       │                                                     │
│       │ 1. 请求 TSO (批量)                                  │
│       ▼                                                     │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                   PD Leader                         │   │
│   │                                                     │   │
│   │   2. 分配 TSO                                       │   │
│   │   ┌─────────────────────────────────────────────┐   │   │
│   │   │                                             │   │   │
│   │   │   当前物理时间: T                           │   │   │
│   │   │   当前逻辑计数: C                           │   │   │
│   │   │                                             │   │   │
│   │   │   分配 N 个 TSO:                            │   │   │
│   │   │   [T, C], [T, C+1], ..., [T, C+N-1]        │   │   │
│   │   │                                             │   │   │
│   │   │   更新逻辑计数: C = C + N                   │   │   │
│   │   │                                             │   │   │
│   │   │   如果 C > 65535:                           │   │   │
│   │   │     T = T + 1                               │   │   │
│   │   │     C = 0                                    │   │   │
│   │   │                                             │   │   │
│   │   └─────────────────────────────────────────────┘   │   │
│   │                                                     │   │
│   │   3. 持久化到 Raft 日志 (保证不重复)               │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│       │                                                     │
│       │ 4. 返回 TSO 批次                                   │
│       ▼                                                     │
│   TiDB Server                                               │
│   本地缓存 TSO,供事务使用                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.3 TSO使用场景 #

text
TSO 使用场景
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 事务开始                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   BEGIN;                                            │   │
│   │   // 获取 start_ts                                  │   │
│   │   // 用于读取快照                                   │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   2. 事务提交                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   COMMIT;                                           │   │
│   │   // 获取 commit_ts                                 │   │
│   │   // 用于写入新版本                                 │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   3. MVCC 版本                                              │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   Key + commit_ts → Value                          │   │
│   │                                                     │   │
│   │   读取时:                                           │   │
│   │   只读取 commit_ts < start_ts 的版本               │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   4. GC 安全点                                              │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   safe_point 之前的版本可以删除                    │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

四、调度系统 #

4.1 调度器类型 #

text
PD 调度器类型
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. balance-leader-scheduler                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   目标: 均衡各节点的 Leader 数量                   │   │
│   │   方式: 转移 Leader 到其他副本                     │   │
│   │                                                     │   │
│   │   场景:                                             │   │
│   │   - 某节点 Leader 过多,负载高                     │   │
│   │   - 新节点加入,需要均衡                           │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   2. balance-region-scheduler                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   目标: 均衡各节点的存储容量                       │   │
│   │   方式: 迁移 Region 副本                           │   │
│   │                                                     │   │
│   │   场景:                                             │   │
│   │   - 某节点存储空间不足                             │   │
│   │   - 数据分布不均匀                                 │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   3. hot-region-scheduler                                   │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   目标: 分散热点 Region                            │   │
│   │   方式: 迁移热点 Region 的副本                     │   │
│   │                                                     │   │
│   │   场景:                                             │   │
│   │   - 某些 Region 读写频繁                           │   │
│   │   - 单节点成为热点                                 │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   4. evict-leader-scheduler                                 │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   目标: 驱逐某节点的所有 Leader                   │   │
│   │   方式: 转移 Leader 到其他节点                     │   │
│   │                                                     │   │
│   │   场景:                                             │   │
│   │   - 节点需要维护                                   │   │
│   │   - 节点需要下线                                   │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.2 调度流程 #

text
调度决策流程
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 信息收集                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   TiKV 心跳 → PD                                    │   │
│   │   ├── Store 信息                                    │   │
│   │   │   - 容量、已用空间                              │   │
│   │   │   - Region 数量、Leader 数量                    │   │
│   │   │   - 读写 QPS                                    │   │
│   │   │                                                 │   │
│   │   └── Region 信息                                   │   │
│   │       - Region ID、Leader                           │   │
│   │       - 读写统计                                    │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                          │                                  │
│                          ▼                                  │
│   2. 调度计算                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   PD 调度器计算:                                    │   │
│   │                                                     │   │
│   │   for each scheduler:                               │   │
│   │       ops = scheduler.Schedule(cluster)             │   │
│   │       if ops != nil:                                │   │
│   │           return ops                                │   │
│   │                                                     │   │
│   │   调度优先级:                                       │   │
│   │   1. 安全相关 (副本数不足)                         │   │
│   │   2. 热点调度                                       │   │
│   │   3. 容量均衡                                       │   │
│   │   4. Leader 均衡                                    │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                          │                                  │
│                          ▼                                  │
│   3. 执行调度                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   PD 返回调度命令给 TiKV                            │   │
│   │                                                     │   │
│   │   调度命令类型:                                     │   │
│   │   ├── TransferLeader: 转移 Leader                  │   │
│   │   ├── AddPeer: 添加副本                            │   │
│   │   ├── RemovePeer: 删除副本                         │   │
│   │   ├── SplitRegion: 分裂 Region                     │   │
│   │   └── MergeRegion: 合并 Region                     │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                          │                                  │
│                          ▼                                  │
│   4. 执行确认                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   TiKV 执行调度命令                                 │   │
│   │   通过心跳回报执行结果                              │   │
│   │   PD 更新元数据                                     │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4.3 调度限制 #

text
调度限制参数
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   参数                          默认值      说明            │
│   ────────────────────────────────────────────────────────  │
│   leader-schedule-limit         4          同时进行的      │
│                                            Leader 调度数   │
│                                                             │
│   region-schedule-limit         2048       同时进行的      │
│                                            Region 调度数   │
│                                                             │
│   replica-schedule-limit        64         同时进行的      │
│                                            副本调度数      │
│                                                             │
│   merge-schedule-limit          8          同时进行的      │
│                                            合并调度数      │
│                                                             │
│   hot-region-schedule-limit     4          同时进行的      │
│                                            热点调度数      │
│                                                             │
│   max-replicas                  3          每个 Region     │
│                                            的副本数        │
│                                                             │
│   max-pending-peer-count        16         单节点最大      │
│                                            待处理副本数    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

五、热点调度 #

5.1 热点检测 #

text
热点检测机制
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   PD 通过心跳收集 Region 读写统计:                          │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   统计指标:                                         │   │
│   │   ├── 读 QPS (ReadKeys, ReadBytes)                  │   │
│   │   ├── 写 QPS (WrittenKeys, WrittenBytes)            │   │
│   │   └── 查询 QPS (QueryStats)                         │   │
│   │                                                     │   │
│   │   热点判定:                                         │   │
│   │   - Region QPS > 阈值 (默认 1000 QPS)              │   │
│   │   - Region 流量 > 阈值 (默认 16MB/s)               │   │
│   │                                                     │   │
│   │   热点类型:                                         │   │
│   │   ├── 读热点: 大量读取请求                         │   │
│   │   └── 写热点: 大量写入请求                         │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   热点统计示例:                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   Region 1: Read QPS = 5000   ← 读热点             │   │
│   │   Region 2: Write QPS = 3000  ← 写热点             │   │
│   │   Region 3: Read QPS = 100    ← 正常               │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5.2 热点调度策略 #

text
热点调度策略
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 读热点处理                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   策略: 分散 Leader                                 │   │
│   │                                                     │   │
│   │   热点 Region Leader 在 TiKV 1                      │   │
│   │            │                                        │   │
│   │            ▼                                        │   │
│   │   转移 Leader 到 TiKV 2                             │   │
│   │                                                     │   │
│   │   效果: 分散读请求到不同节点                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   2. 写热点处理                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   策略: 分裂 + 打散副本                             │   │
│   │                                                     │   │
│   │   热点 Region                                       │   │
│   │            │                                        │   │
│   │            ▼                                        │   │
│   │   分裂为多个小 Region                               │   │
│   │            │                                        │   │
│   │            ▼                                        │   │
│   │   打散到不同 TiKV 节点                              │   │
│   │                                                     │   │
│   │   效果: 分散写请求到不同节点                        │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
│   3. 自动分裂                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │   配置:                                             │   │
│   │   hot-region-split-size = "10MB"                   │   │
│   │   hot-region-split-qps = 1000                      │   │
│   │                                                     │   │
│   │   触发条件:                                         │   │
│   │   - Region 大小 > hot-region-split-size            │   │
│   │   - Region QPS > hot-region-split-qps              │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

六、配置管理 #

6.1 查看配置 #

sql
-- 查看所有配置
SHOW CONFIG;

-- 查看 PD 配置
SHOW CONFIG WHERE TYPE = 'pd';

-- 查看特定配置
SHOW CONFIG WHERE TYPE = 'pd' AND NAME LIKE '%schedule%';

6.2 修改配置 #

sql
-- 动态修改配置
SET CONFIG pd `max-replicas` = 3;
SET CONFIG pd `leader-schedule-limit` = 8;

-- 修改调度参数
SET CONFIG pd `region-schedule-limit` = 2048;
SET CONFIG pd `hot-region-schedule-limit` = 8;

6.3 调度器管理 #

sql
-- 查看调度器
SELECT * FROM INFORMATION_SCHEMA.PD_SCHEDULERS;

-- 添加调度器 (通过 pd-ctl)
-- pd-ctl scheduler add balance-leader-scheduler

-- 删除调度器
-- pd-ctl scheduler remove balance-leader-scheduler

-- 暂停调度器
-- pd-ctl scheduler pause balance-leader-scheduler 60

-- 恢复调度器
-- pd-ctl scheduler resume balance-leader-scheduler

七、监控与诊断 #

7.1 关键指标 #

text
PD 关键监控指标
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 集群状态                                               │
│   ├── Store 状态 (Up/Down/Offline)                         │
│   ├── Region 健康状态                                       │
│   └── 副本完整性                                            │
│                                                             │
│   2. 调度指标                                               │
│   ├── 调度速度 (ops/s)                                      │
│   ├── 调度队列长度                                          │
│   ├── 调度成功率                                            │
│   └── 调度延迟                                              │
│                                                             │
│   3. 容量指标                                               │
│   ├── 存储容量使用率                                        │
│   ├── Region 数量                                           │
│   ├── Leader 数量                                           │
│   └── 热点 Region 数量                                      │
│                                                             │
│   4. TSO 指标                                               │
│   ├── TSO 分配延迟                                          │
│   ├── TSO 请求 QPS                                          │
│   └── TSO 物理时间偏差                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

7.2 常用诊断命令 #

bash
# 使用 pd-ctl 工具

# 查看集群信息
pd-ctl cluster

# 查看 Store 信息
pd-ctl store

# 查看 Region 信息
pd-ctl region
pd-ctl region <region_id>

# 查看热点 Region
pd-ctl hot read
pd-ctl hot write

# 查看调度器
pd-ctl scheduler show

# 查看 Leader 分布
pd-ctl operator show

# 查看 TSO
pd-ctl tso

八、最佳实践 #

8.1 调优建议 #

text
PD 调优建议
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. 调度速度                                               │
│   ├── 生产环境: 适当提高调度限制                           │
│   ├── 维护窗口: 大幅提高调度限制                           │
│   └── 日常: 保持默认值                                     │
│                                                             │
│   2. 热点处理                                               │
│   ├── 监控热点 Region                                      │
│   ├── 及时调整热点参数                                     │
│   └── 考虑业务层面优化                                     │
│                                                             │
│   3. 容量规划                                               │
│   ├── 保持各节点容量均衡                                   │
│   ├── 预留足够空间                                         │
│   └── 及时扩容                                             │
│                                                             │
│   4. 高可用                                                 │
│   ├── 至少 3 个 PD 节点                                    │
│   ├── 跨机架/机房部署                                      │
│   └── 监控 PD 状态                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

8.2 故障处理 #

text
常见故障处理
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│   1. PD Leader 切换频繁                                    │
│   ├── 检查网络延迟                                         │
│   ├── 检查磁盘 IO                                          │
│   └── 调整选举超时时间                                     │
│                                                             │
│   2. 调度不执行                                             │
│   ├── 检查调度器是否启用                                   │
│   ├── 检查调度限制                                         │
│   └── 检查 Store 状态                                      │
│                                                             │
│   3. 热点无法消除                                           │
│   ├── 检查热点参数                                         │
│   ├── 手动分裂 Region                                      │
│   └── 业务层面优化                                         │
│                                                             │
│   4. Region 副本不足                                        │
│   ├── 检查 Store 数量                                      │
│   ├── 检查副本配置                                         │
│   └── 检查 Store 状态                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

九、总结 #

PD 核心要点:

模块 要点
元数据管理 集群信息、Region 信息、心跳机制
TSO 全局时间戳、事务版本控制
调度系统 Leader 均衡、Region 均衡、热点调度
高可用 Raft 协议、自动故障切换
监控 关键指标、诊断命令

下一步,让我们学习 TiFlash 列存引擎!

最后更新:2026-03-27