周末公司机房断电,上班后启动集群提示PD启动失败

【TiDB 使用环境】生产环境
【TiDB 版本】v8.1.2
【操作系统】银河麒麟V10-SP2
【部署方式】本地机房部署
【集群数据量】2TB
【集群节点数】3
TIDB 178/179/180(IPAddress)
TIKV 178/179/180
TIFlash 178
PD 179
【问题复现路径】周末公司断电,无人知晓此情况
【遇到的问题:问题现象及影响】PD无法启动
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
集群已无法启动,无法截图
【复制黏贴 ERROR 报错的日志】
tiup start报错如下:
Error: failed to start tikv: failed to start: 192.168.15.180 tikv-20160.service, please check the instance’s log(/tidb/tidb_deploy/tikv-20160/log) for more detail.: timed out waiting for port 20160 to be started after 2m0s

查询tikv日志如下:
[2025/11/03 10:48:36.200 +08:00] [INFO] [util.rs:639] [“connecting to PD endpoint”] [endpoints=192.168.15.179:2379] [thread_id=1]
[2025/11/03 10:48:36.203 +08:00] [INFO] [util.rs:601] [“PD failed to respond”] [err=“Grpc(RpcFailure(RpcStatus { code: 14-UNAVAILABLE, message: "failed to connect to all addresses", details: }))”] [endpoints=192.168.15.179:2379] [thread_id=1]

以下为pd_strerr.log报错信息
goroutine 300 [running]:
go.etcd.io/bbolt.(*DB).freepages.func2()
/root/go/pkg/mod/go.etcd.io/bbolt@v1.3.9/db.go:1202 +0x8d
created by go.etcd.io/bbolt.(*DB).freepages in goroutine 299
/root/go/pkg/mod/go.etcd.io/bbolt@v1.3.9/db.go:1200 +0x1e5
panic: freepages: failed to get all reachable pages (key[0]=(hex)0000000000739a9e5f0000000000000000 on leaf page(65) needs to be < than key of the next element in ancestor (hex)0000000000739a845f0000000000000000. Pages stack: [84 79 65])
【其他附件:截图/日志/监控】


断电重启,我们一般是先检查防火前有没有关闭。

由于是公司内部服务器,防火墙安装好操作系统后,直接disable掉了

看你这个报错是kv数据损坏了,重建恢复吧。为啥只有一个pd节点呢

找到一个类似的,可能要重建PD了

我看了一上午论坛,很多吧友大多是3PD,然后坏的也都是TIKV或TIDB。我1PD是因为资源紧张。

KV数据损坏了吗?我tiup start,先启动的PD,PD启动成功后才会启动tikv,所以我想着先尝试解决一下如何让pd启动成功。

看下这里详细点报错呢。资源不够也不应该跑flash,再说小集群pd也耗不了太多资源,最少也要满足最小最佳实践拓扑,不然出奇奇怪怪问题不好搞

tikv启动失败,指向了pd未启动

嗯,这篇文章我搜问题的时候第一眼就看到了。类似几个文章的解决方案都是PD Recover

PD recover 肯定要做的,你这就一个 PD 服务,这个恢复需要依赖 TiKV 和 PD 的日志来重建 PD 集群,这次重建集群可以考虑把 PD 和 TiDB 放在一个云主机上面,PD 本身不会占用太多资源。

虽然部署3个PD,其实在工作的只有1个,剩下两个是为了高可用的,当工作的挂掉,另外2个能即时选一个顶上去。

我按照https://blog.csdn.net/weixin_50870405/article/details/134414683(pd recover详细操作步骤)该教程尝试修复,但我在“启动新pd”那一步,依然失败了,我不确定pd启动失败后,还是否继续往下执行修复步骤( 三、使用pd-recover工具去修复

谢谢老师

完全重建pd,参考官方文档来吧。https://docs.pingcap.com/zh/tidb/stable/pd-recover/#pd-recover-使用文档

1 个赞

@TiDBer_Z7S7Jqgo 按照这个官网的来吧,最好再测试环境练习测试一下,搞一个 sop 再生产变更。这个 PD Recover 风险比较高,要在测试环境做完一个 SOP。

无法恢复只能重建

重建吧

很典型的问题,解决了吗