外观
TiDB 故障排查流程图
核心故障排查流程图
1. 集群整体不可用故障排查
排查步骤
检查 PD 状态:
bashtiup cluster display <cluster-name> | grep pd tiup ctl pd --host <pd-host>:2379 member检查 TiDB 状态:
bashtiup cluster display <cluster-name> | grep tidb tiup ctl tidb --host <tidb-host>:10080 status检查 TiKV 状态:
bashtiup cluster display <cluster-name> | grep tikv tiup ctl pd --host <pd-host>:2379 store网络或客户端故障排查:
bashping <tidb-host> telnet <tidb-host> 4000
2. 查询延迟高故障排查
排查步骤
检查 TiDB 状态:
bashtop -p <tidb-pid> tiup ctl tidb --host <tidb-host>:10080 status检查 TiKV 状态:
bashtiup ctl tikv --host <tikv-host>:20160 status检查 SQL 语句:
sqlEXPLAIN ANALYZE SELECT * FROM table_name WHERE ...;检查数据分布:
bashtiup ctl pd --host <pd-host>:2379 store tiup ctl pd --host <pd-host>:2379 region --key <key>
3. TiKV 节点故障排查
排查步骤
检查节点状态:
bashtiup cluster display <cluster-name> | grep <tikv-host>检查日志错误:
bashgrep -i error /path/to/tikv/log/tikv.log检查硬件状态:
bashsmartctl -a /dev/sda free -h df -h检查网络连接:
bashping <pd-host> ping <other-tikv-host>
4. PD Leader 频繁切换故障排查
排查步骤
检查 PD 节点状态:
bashtiup ctl pd --host <pd-host>:2379 member检查网络状态:
bashping -c 10 <pd-host> traceroute <pd-host>检查资源使用率:
bashtop -p <pd-pid> free -h检查时钟同步:
bashntpdate -q <ntp-server>
5. 数据一致性问题排查
排查步骤
检查 Raft 状态:
bashtiup ctl tikv --host <tikv-host>:20160 raft --region-id <region-id>检查 TiKV 数据完整性:
bashtiup ctl tikv --host <tikv-host>:20160 checksum --region-id <region-id>检查 SQL 语句:
sqlEXPLAIN SELECT * FROM table_name WHERE ...;检查 TiDB 执行计划:
sqlEXPLAIN ANALYZE SELECT * FROM table_name WHERE ...;
6. TiFlash 查询故障排查
排查步骤
检查 TiFlash 状态:
bashtiup cluster display <cluster-name> | grep tiflash检查 TiFlash 副本状态:
sqlSELECT * FROM information_schema.tiflash_replica;检查 TiFlash 配置:
bashcat /path/to/tiflash/config/tiflash.toml检查资源使用率:
bashtop -p <tiflash-pid>
7. TiCDC 同步延迟故障排查
排查步骤
检查 TiCDC 状态:
bashtiup ctl cdc --server <cdc-host>:8300 changefeed list检查上游 TiDB 状态:
bashtiup ctl tidb --host <tidb-host>:10080 status检查下游数据库状态:
bash# 根据下游数据库类型选择合适的检查命令检查同步任务配置:
bashtiup ctl cdc --server <cdc-host>:8300 changefeed query --changefeed-id <changefeed-id>
硬件故障排查流程图
1. 磁盘故障排查
排查步骤
检查磁盘状态:
bashsmartctl -a /dev/sda检查文件系统:
bashfsck -n /dev/sda1检查磁盘空间:
bashdf -h检查 I/O 性能:
bashiostat -x 1
2. 内存故障排查
排查步骤
检查内存使用率:
bashfree -h检查进程内存占用:
bashtop -o %MEM检查内存硬件:
bashmemtest86+ # 需要重启到内存测试模式检查配置参数:
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. 更新机制
- 收集反馈:从故障处理记录和团队成员反馈中收集流程图改进建议
- 分析需求:评估反馈的合理性和优先级
- 更新流程图:使用 Mermaid 语法更新流程图
- 审核验证:由资深运维人员审核更新后的流程图
- 发布生效:将更新后的流程图发布到文档系统
- 培训宣贯:向团队成员介绍更新内容
常见问题(FAQ)
Q1: 如何选择合适的流程图?
A1: 根据故障现象选择对应的流程图:
- 集群整体不可用:使用「集群整体不可用故障排查」流程图
- 查询延迟高:使用「查询延迟高故障排查」流程图
- 特定组件故障:使用对应组件的故障排查流程图
Q2: 流程图中的步骤是否必须严格执行?
A2: 流程图提供了标准化的排查流程,建议严格执行。但在实际排查中,可以根据经验适当调整顺序,加快故障定位速度。
Q3: 如何处理流程图中未覆盖的故障?
A3: 对于流程图中未覆盖的故障:
- 按照通用故障排查流程处理
- 记录故障处理过程
- 反馈给团队,更新流程图
Q4: 流程图是否适用于所有 TiDB 版本?
A4: 流程图基于 TiDB 核心架构设计,适用于大多数 TiDB 版本。但随着版本升级,某些组件的行为可能发生变化,需要及时更新流程图。
Q5: 如何将流程图应用到实际故障处理中?
A5: 建议:
- 将流程图打印或保存在便于访问的位置
- 故障处理时对照流程图执行
- 记录实际执行情况和偏差
- 定期总结和优化流程图
Q6: 流程图是否包含所有可能的故障情况?
A6: 流程图覆盖了 TiDB 常见的故障情况,但无法包含所有可能的故障。对于特殊故障,需要结合实际情况进行分析和处理。
Q7: 如何验证流程图的有效性?
A7: 可以通过以下方式验证流程图的有效性:
- 在测试环境中模拟故障,按照流程图进行排查
- 对比实际故障处理时间和预期时间
- 收集团队成员的反馈
- 统计故障处理成功率
Q8: 如何学习和掌握这些流程图?
A8: 建议:
- 仔细阅读每个流程图,理解其逻辑
- 在测试环境中进行故障演练
- 参与实际故障处理,积累经验
- 定期复习和更新知识
