Skip to content

TiDB 故障排查流程图

核心故障排查流程图

1. 集群整体不可用故障排查

排查步骤

  1. 检查 PD 状态

    bash
    tiup cluster display <cluster-name> | grep pd
    tiup ctl pd --host <pd-host>:2379 member
  2. 检查 TiDB 状态

    bash
    tiup cluster display <cluster-name> | grep tidb
    tiup ctl tidb --host <tidb-host>:10080 status
  3. 检查 TiKV 状态

    bash
    tiup cluster display <cluster-name> | grep tikv
    tiup ctl pd --host <pd-host>:2379 store
  4. 网络或客户端故障排查

    bash
    ping <tidb-host>
    telnet <tidb-host> 4000

2. 查询延迟高故障排查

排查步骤

  1. 检查 TiDB 状态

    bash
    top -p <tidb-pid>
    tiup ctl tidb --host <tidb-host>:10080 status
  2. 检查 TiKV 状态

    bash
    tiup ctl tikv --host <tikv-host>:20160 status
  3. 检查 SQL 语句

    sql
    EXPLAIN ANALYZE SELECT * FROM table_name WHERE ...;
  4. 检查数据分布

    bash
    tiup ctl pd --host <pd-host>:2379 store
    tiup ctl pd --host <pd-host>:2379 region --key <key>

3. TiKV 节点故障排查

排查步骤

  1. 检查节点状态

    bash
    tiup cluster display <cluster-name> | grep <tikv-host>
  2. 检查日志错误

    bash
    grep -i error /path/to/tikv/log/tikv.log
  3. 检查硬件状态

    bash
    smartctl -a /dev/sda
    free -h
    df -h
  4. 检查网络连接

    bash
    ping <pd-host>
    ping <other-tikv-host>

4. PD Leader 频繁切换故障排查

排查步骤

  1. 检查 PD 节点状态

    bash
    tiup ctl pd --host <pd-host>:2379 member
  2. 检查网络状态

    bash
    ping -c 10 <pd-host>
    traceroute <pd-host>
  3. 检查资源使用率

    bash
    top -p <pd-pid>
    free -h
  4. 检查时钟同步

    bash
    ntpdate -q <ntp-server>

5. 数据一致性问题排查

排查步骤

  1. 检查 Raft 状态

    bash
    tiup ctl tikv --host <tikv-host>:20160 raft --region-id <region-id>
  2. 检查 TiKV 数据完整性

    bash
    tiup ctl tikv --host <tikv-host>:20160 checksum --region-id <region-id>
  3. 检查 SQL 语句

    sql
    EXPLAIN SELECT * FROM table_name WHERE ...;
  4. 检查 TiDB 执行计划

    sql
    EXPLAIN ANALYZE SELECT * FROM table_name WHERE ...;

6. TiFlash 查询故障排查

排查步骤

  1. 检查 TiFlash 状态

    bash
    tiup cluster display <cluster-name> | grep tiflash
  2. 检查 TiFlash 副本状态

    sql
    SELECT * FROM information_schema.tiflash_replica;
  3. 检查 TiFlash 配置

    bash
    cat /path/to/tiflash/config/tiflash.toml
  4. 检查资源使用率

    bash
    top -p <tiflash-pid>

7. TiCDC 同步延迟故障排查

排查步骤

  1. 检查 TiCDC 状态

    bash
    tiup ctl cdc --server <cdc-host>:8300 changefeed list
  2. 检查上游 TiDB 状态

    bash
    tiup ctl tidb --host <tidb-host>:10080 status
  3. 检查下游数据库状态

    bash
    # 根据下游数据库类型选择合适的检查命令
  4. 检查同步任务配置

    bash
    tiup ctl cdc --server <cdc-host>:8300 changefeed query --changefeed-id <changefeed-id>

硬件故障排查流程图

1. 磁盘故障排查

排查步骤

  1. 检查磁盘状态

    bash
    smartctl -a /dev/sda
  2. 检查文件系统

    bash
    fsck -n /dev/sda1
  3. 检查磁盘空间

    bash
    df -h
  4. 检查 I/O 性能

    bash
    iostat -x 1

2. 内存故障排查

排查步骤

  1. 检查内存使用率

    bash
    free -h
  2. 检查进程内存占用

    bash
    top -o %MEM
  3. 检查内存硬件

    bash
    memtest86+  # 需要重启到内存测试模式
  4. 检查配置参数

    bash
    # 检查 TiKV 内存配置
    cat /path/to/tikv/config/tikv.toml | grep -A 10 "block-cache-size"

故障排查最佳实践

1. 流程图使用建议

  • 按照流程严格执行:避免跳过步骤,确保全面排查
  • 记录排查过程:便于后续分析和优化
  • 及时更新流程图:根据实际故障处理经验,定期更新流程图
  • 培训团队成员:确保所有运维人员熟悉排查流程

2. 故障信息收集

在进行故障排查前,收集以下信息:

  • 故障发生时间和现象
  • 集群配置和拓扑
  • 相关组件的日志
  • 监控数据
  • 最近的操作记录

3. 故障排查工具

常用的故障排查工具:

  • tiup:集群管理和状态检查
  • pd-ctl:PD 集群管理和状态检查
  • tikv-ctl:TiKV 集群管理和状态检查
  • tidb-ctl:TiDB 集群管理和状态检查
  • ping/traceroute:网络连接检查
  • top/htop:资源使用率检查
  • iostat:磁盘 I/O 检查
  • smartctl:磁盘健康状态检查
  • tcpdump:网络数据包分析

4. 故障恢复验证

故障恢复后,进行以下验证:

  • 检查集群状态是否正常
  • 检查业务功能是否恢复
  • 检查性能是否符合预期
  • 检查数据一致性
  • 监控一段时间,确保故障不再复发

流程图维护与更新

1. 维护流程

  • 定期审核:每季度审核一次流程图的准确性和完整性
  • 故障反馈:将实际故障处理经验反馈到流程图中
  • 版本更新:随着 TiDB 版本升级,更新流程图以适应新特性和变化
  • 团队贡献:鼓励团队成员参与流程图的维护和更新

2. 更新机制

  1. 收集反馈:从故障处理记录和团队成员反馈中收集流程图改进建议
  2. 分析需求:评估反馈的合理性和优先级
  3. 更新流程图:使用 Mermaid 语法更新流程图
  4. 审核验证:由资深运维人员审核更新后的流程图
  5. 发布生效:将更新后的流程图发布到文档系统
  6. 培训宣贯:向团队成员介绍更新内容

常见问题(FAQ)

Q1: 如何选择合适的流程图?

A1: 根据故障现象选择对应的流程图:

  • 集群整体不可用:使用「集群整体不可用故障排查」流程图
  • 查询延迟高:使用「查询延迟高故障排查」流程图
  • 特定组件故障:使用对应组件的故障排查流程图

Q2: 流程图中的步骤是否必须严格执行?

A2: 流程图提供了标准化的排查流程,建议严格执行。但在实际排查中,可以根据经验适当调整顺序,加快故障定位速度。

Q3: 如何处理流程图中未覆盖的故障?

A3: 对于流程图中未覆盖的故障:

  1. 按照通用故障排查流程处理
  2. 记录故障处理过程
  3. 反馈给团队,更新流程图

Q4: 流程图是否适用于所有 TiDB 版本?

A4: 流程图基于 TiDB 核心架构设计,适用于大多数 TiDB 版本。但随着版本升级,某些组件的行为可能发生变化,需要及时更新流程图。

Q5: 如何将流程图应用到实际故障处理中?

A5: 建议:

  1. 将流程图打印或保存在便于访问的位置
  2. 故障处理时对照流程图执行
  3. 记录实际执行情况和偏差
  4. 定期总结和优化流程图

Q6: 流程图是否包含所有可能的故障情况?

A6: 流程图覆盖了 TiDB 常见的故障情况,但无法包含所有可能的故障。对于特殊故障,需要结合实际情况进行分析和处理。

Q7: 如何验证流程图的有效性?

A7: 可以通过以下方式验证流程图的有效性:

  1. 在测试环境中模拟故障,按照流程图进行排查
  2. 对比实际故障处理时间和预期时间
  3. 收集团队成员的反馈
  4. 统计故障处理成功率

Q8: 如何学习和掌握这些流程图?

A8: 建议:

  1. 仔细阅读每个流程图,理解其逻辑
  2. 在测试环境中进行故障演练
  3. 参与实际故障处理,积累经验
  4. 定期复习和更新知识