当前位置: 首页 > news >正文

TiDB 集群故障诊断

当试用 TiDB 遇到问题时,请先参考本篇文档。如果问题未解决,请按文档要求收集必要的信息通过 Github 提供给 TiDB 开发者。

如何给 TiDB 开发者报告错误

当使用 TiDB 遇到问题并且通过后面所列信息无法解决时,请收集以下信息并创建新 Issue:

  • 具体的出错信息以及正在执行的操作
  • 当前所有组件的状态
  • 出问题组件 log 中的 error/fatal/panic 信息
  • 机器配置以及部署拓扑
  • dmesg 中 TiDB 组件相关的问题

数据库连接不上

首先请确认集群的各项服务是否已经启动,包括 tidb-server、pd-server、tikv-server。请用 ps 命令查看所有进程是否在。如果某个组件的进程已经不在了,请参考对应的章节排查错误。

如果所有的进程都在,请查看 tidb-server 的日志,看是否有报错?常见的错误包括:

  • InformationSchema is out of date

    无法连接 tikv-server,请检查 pd-server 以及 tikv-server 的状态和日志。

  • panic

    程序有错误,请将具体的 panic log 提供给 TiDB 开发者。

    如果是清空数据并重新部署服务,请确认以下信息:

  • pd-server、tikv-server 数据都已清空

    tikv-server 存储具体的数据,pd-server 存储 tikv-server 中数据的元信息。如果只清空 pd-server 或只清空 tikv-server 的数据,会导致两边数据不匹配。

  • 清空 pd-server 和 tikv-server 的数据并重启后,也需要重启 tidb-server

    集群 ID 是由 pd-server 在集群初始化时随机分配,所以重新部署集群后,集群 ID 会发生变化。tidb-server 业务需要重启以获取新的集群 ID。

tidb-server 启动报错

tidb-server 无法启动的常见情况包括:

  • 启动参数错误

    请参考 TiDB 命令行参数。

  • 端口被占用:lsof -i:port

    请确保 tidb-server 启动所需要的端口未被占用。

  • 无法连接 pd-server

    首先检查 pd-server 的进程状态和日志,确保 pd-server 成功启动,对应端口已打开:lsof -i:port

    若 pd-server 正常,则需要检查 tidb-server 机器和 pd-server 对应端口之间的连通性,确保网段连通且对应服务端口已添加到防火墙白名单中,可通过 nc 或 curl 工具检查。

    例如,假设 tidb 服务位于 192.168.1.100,无法连接的 pd 位于 192.168.1.101,且 2379 为其 client port,则可以在 tidb 机器上执行 nc -v -z 192.168.1.101 2379,测试是否可以访问端口。或使用 curl -v 192.168.1.101:2379/pd/api/v1/leader 直接检查 pd 是否正常服务。

tikv-server 启动报错

  • 启动参数错误

    请参考 TiKV 启动参数文档。

  • 端口被占用:lsof -i:port

    请确保 tikv-server 启动所需要的端口未被占用:lsof -i:port

  • 无法连接 pd-server

    首先检查 pd-server 的进程状态和日志。确保 pd-server 成功启动,对应端口已打开:lsof -i:port

    若 pd-server 正常,则需要检查 tikv-server 机器和 pd-server 对应端口之间的连通性,确保网段连通且对应服务端口已添加到防火墙白名单中,可通过 nc 或 curl 工具检查。具体命令参考上一节。

  • 文件被占用

    不要在一个数据库文件目录上打开两个 tikv。

pd-server 启动报错

  • 启动参数错误

    请参考 PD 命令行参数文档。

  • 端口被占用:lsof -i:port

    请确保 pd-server 启动所需要的端口未被占用:lsof -i:port

TiDB/TiKV/PD 进程异常退出

  • 进程是否是启动在前台

    当前终端退出给其所有子进程发送 HUP 信号,从而导致进程退出。

  • 是否是在命令行用过 nohup+& 方式直接运行

    这样依然可能导致进程因终端连接突然中断,作为终端 SHELL 的子进程被杀掉。

    推荐将启动命令写在脚本中,通过脚本运行(相当于二次 fork 启动)。

TiKV 进程异常重启

  • 检查 dmesg 或者 syslog 里面是否有 OOM 信息

    如果有 OOM 信息并且杀掉的进程为 TiKV,请减少 TiKV 的 RocksDB 的各个 CF 的 block-cache-size 值。

  • 检查 TiKV 日志是否有 panic 的 log

    提交 Issue 并附上 panic 的 log。

TiDB panic

请提供 panic 的 log。

连接被拒绝

  • 请确保操作系统的网络参数正确,包括但不限于
    • 连接字符串中的端口和 tidb-server 启动的端口需要一致
    • 请保证防火墙的配置正确

Too many open files

在启动进程之前,请确保 ulimit -n 的结果足够大,推荐设为 unlimited 或者是大于 1000000。

数据库访问超时,系统负载高

首先检查 SLOW-QUERY 日志,判断是否是因为某条 SQL 语句导致。如果未能解决,请提供如下信息:

  • 部署的拓扑结构
    • tidb-server/pd-server/tikv-server 部署了几个实例
    • 这些实例在机器上是如何分布的
  • 机器的硬件配置
    • CPU 核数
    • 内存大小
    • 硬盘类型(SSD 还是机械硬盘)
    • 是实体机还是虚拟机
  • 机器上除了 TiDB 集群之外是否还有其他服务
  • pd-server 和 tikv-server 是否分开部署
  • 目前正在进行什么操作
  • 用 top -H 命令查看当前占用 CPU 的线程名
  • 最近一段时间的网络/IO 监控数据是否有异常

相关文章:

  • 谷粒学苑_第五天
  • python实现SMB服务账号密码爆破功能 Metasploit 中的 smb_login
  • 【C基础篇】选择结构与循环控制
  • 一位程序员感慨:互联网行业太过共享,才导致了门槛越来越低
  • 【图像隐写】基于matlab遗传算法的奇异值分解数字水印嵌入提取【含Matlab源码 2115期】
  • 计算机视觉中的细节问题(二)
  • Javascript 代码规范
  • linux驱动开发(2)开发流程
  • 【云原生】设备云之前端可视化编程
  • 计算电磁学(二)分析方法
  • 【Django】开发日报_3.2_Day:模板继承
  • 探索原味BFF模式
  • unity初学 Mstudio教程
  • Complete Partition Of Array
  • 单节点k8s—自签名证书—四层负载均衡—helm安装rancher
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS实用技巧
  • iOS | NSProxy
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js对象的深浅拷贝
  • laravel5.5 视图共享数据
  • MySQL用户中的%到底包不包括localhost?
  • Nodejs和JavaWeb协助开发
  • Vue学习第二天
  • windows下使用nginx调试简介
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 复杂数据处理
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 什么软件可以剪辑音乐?
  • 收藏好这篇,别再只说“数据劫持”了
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 携程小程序初体验
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 优化 Vue 项目编译文件大小
  • 中文输入法与React文本输入框的问题与解决方案
  • Java数据解析之JSON
  • 阿里云服务器如何修改远程端口?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​如何在iOS手机上查看应用日志
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # C++之functional库用法整理
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二开)Flink 修改源码拓展 SQL 语法
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (一)基于IDEA的JAVA基础10
  • (原創) 系統分析和系統設計有什麼差別? (OO)