无命令行集群管理工具时,如何检查TiDB集群整体健康状态?
检查TiDB集群健康状态(无集群管理工具版)
嘿,这个场景我碰到过好几次——测试环境部署完TiDB,手头没tiup或者pd-ctl这类工具,想确认集群健康状态对吧?别慌,咱们可以直接通过各个组件的内置API和基础命令来排查,一步步来:
1. 先确认PD节点(集群大脑)是否正常
PD是整个TiDB集群的核心管理组件,先搞定它准没错:
- 用PD的健康API检查:在任意能访问PD节点的机器上执行:
返回结果里如果curl http://<你的PD节点IP>:2379/pd/api/v1/healthhealthy字段是true,且members列表里所有PD节点的status都是"Up",说明PD集群正常。 - 查看PD日志:登录PD节点,找到部署目录下的
logs/pd.log,搜索关键词start pd server successfully,如果能找到这条日志,说明PD启动成功。
2. 检查TiKV存储节点状态
TiKV是数据存储层,咱们可以通过PD的API批量查看所有TiKV的状态,不用逐个节点跑:
- 通过PD API查询TiKV集群状态:
返回的curl http://<PD节点IP>:2379/pd/api/v1/storesstores列表里,每个TiKV节点的state_name应该是"Up",如果是"Down"或者"Disconnected",说明这个节点有问题。 - 单个TiKV节点验证:如果想单独看某个TiKV节点,也可以访问它的状态端口:
结果里的curl http://<TiKV节点IP>:20180/statusstore字段会显示该节点的运行状态,比如"state": "Up"。
3. 验证TiDB计算节点可用性
TiDB是SQL服务层,咱们可以直接用MySQL客户端测试连接,或者访问它的状态API:
- MySQL客户端连接测试:如果机器上有mysql客户端,执行:
能成功连接的话,再执行mysql -h <TiDB节点IP> -P 4000 -u rootSELECT VERSION();或者SHOW STATUS LIKE 'TiDB_server_status';,如果返回正常结果,说明TiDB服务没问题。 - TiDB状态API检查:没有mysql客户端的话,用curl访问:
返回结果里会包含TiDB的运行时长、当前连接数、服务状态等信息,curl http://<TiDB节点IP>:10080/statusuptime大于0基本说明服务正常。
4. 附加:检查进程与网络(兜底手段)
如果上面的API都访问不通,咱们可以做基础排查:
- 检查进程是否存活:登录各个节点,执行对应的进程查询命令:
能看到对应的进程且CPU/内存有正常占用,说明进程在运行(但进程存活不代表服务完全正常,还是要结合前面的API测试)。# 检查PD进程 ps aux | grep pd-server # 检查TiKV进程 ps aux | grep tikv-server # 检查TiDB进程 ps aux | grep tidb-server - 检查网络连通性:确保各个节点之间的关键端口能互通:
- PD:2379(服务端口)、2380(集群通信端口)
- TiKV:20160(服务端口)、20180(状态端口)
- TiDB:4000(SQL端口)、10080(状态端口)
可以用telnet或者nc命令测试,比如nc -zv <节点IP> <端口>,能连通说明网络没问题。
内容的提问来源于stack exchange,提问作者Lilian Lee




