PD Recover 使用文档
PD Recover 是对 PD 进行灾难性恢复的工具,用于恢复无法正常启动或服务的 PD 集群。
安装 PD Recover
要使用 PD Recover,你可以从源代码编译,也可以直接下载 TiDB 工具包。
从源代码编译
注意
一般来说,用户不需要编译源代码,因为发布的二进制文件或 Docker 中已包含 PD Recover 工具。开发者可以参考以上步骤来编译源代码。
下载 TiDB 工具包
PD Recover 的安装包位于 TiDB 离线工具包中。下载方式,请参考 TiDB 工具下载。
快速开始
获取 Cluster ID
一般在 PD、TiKV 或 TiDB 的日志中都可以获取 Cluster ID。你可以直接在服务器上查看日志以获取 Cluster ID。
从 PD 日志获取 Cluster ID(推荐)
使用以下命令,从 PD 日志中获取 Cluster ID:
cat {{/path/to}}/pd.log | grep "init cluster id"
[2019/10/14 10:35:38.880 +00:00] [INFO] [server.go:212] ["init cluster id"] [cluster-id=6747551640615446306]
...
或者也可以从 TiDB 或 TiKV 的日志中获取。
从 TiDB 日志获取 Cluster ID
使用以下命令,从 TiDB 日志中获取 Cluster ID:
cat {{/path/to}}/tidb.log | grep "init cluster id"
2019/10/14 19:23:04.688 client.go:161: [info] [pd] init cluster id 6747551640615446306
...
从 TiKV 日志获取 Cluster ID
使用以下命令,从 TiKV 日志中获取 Cluster ID:
cat {{/path/to}}/tikv.log | grep "connect to PD cluster"
[2019/10/14 07:06:35.278 +00:00] [INFO] [tikv-server.rs:464] ["connect to PD cluster 6747551640615446306"]
...
获取已分配 ID
在指定已分配 ID 时,需指定一个比当前最大的已分配 ID 更大的值。可以从监控中获取已分配 ID,也可以直接在服务器上查看日志。
从监控中获取已分配 ID(推荐)
要从监控中获取已分配的 ID,需要确保你所查看的监控指标是上一任 PD Leader 的指标。可从 PD Dashboard 中 Current ID allocation 面板获取最大的已分配 ID。
从 PD 日志获取已分配 ID
要从 PD 日志中获取分配的 ID,需要确保你所查看的日志是上一任 PD Leader 的日志。运行以下命令获取最大的已分配 ID:
cat {{/path/to}}/pd*.log | grep "idAllocator allocates a new id" | awk -F'=' '{print $2}' | awk -F']' '{print $1}' | sort -r -n | head -n 1
4000
...
你也可以在所有 PD server 中运行上述命令,找到最大的值。
部署一套新的 PD 集群
部署新的 PD 集群之前,需要停止当前的 PD 集群,然后删除旧的数据目录(或者用 --data-dir
指定新的数据目录)。
使用 pd-recover
只需在一个 PD 节点上执行 pd-recover
即可。
./pd-recover -endpoints http://10.0.1.13:2379 -cluster-id 6747551640615446306 -alloc-id 10000
重启整个集群
当出现 recovery is successful
的提示信息时,重启整个集群。
常见问题
获取 Cluster ID 时发现有多个 Cluster ID
新建 PD 集群时,会生成新的 Cluster ID。可以通过日志判断旧集群的 Cluster ID。
执行 pd-recover 时返回错误 dial tcp 10.0.1.13:2379: connect: connection refused
执行 pd-recover 时需要 PD 提供服务,请先部署并启动 PD 集群。