【SOP 系列 18】TiUP 环境恢复 TiKV 副本

适用的场景

  • TiKV 的 data 目录被删除,或者 data 目录操作系统级别损坏
  • 注意仅仅针对 3 个 tikv 节点,多个 tikv 节点通常为了不影响其他节点操作,仅在执行多副本恢复后,等待副本补充到其他节点即可,无需重启集群。

环境信息

  • 单机模拟

tiup cluster display tidb-test

模拟 TiKV 损坏

  • 删除 两个 TiKV data 目录数据

cd /home/tidbtest/tidb-data/tikv-43642

rm -rf *

cd /home/tidbtest/tidb-data/tikv-43643

rm -rf *

查看集群状态

tiup cluster display tidb-test

  • 查看 tikv日志
    • 查看被删除的 tikv 日志(日志在 deploy dir 下),提示无 db 目录

[2021/02/23 11:26:26.808 +08:00] [ERROR] [pd.rs:604] [“get disk stat for rocksdb failed”] [err=“Os { code: 2, kind: NotFound, message: "No such file or directory" }”] [engine_path=/home/tidbtest/tidb-data/tikv-43642/db]

恢复步骤

  1. 使用 pd ctl 命令查看 store 信息,获得 Disconnected 状态的 store id

tiup ctl pd -u 172.16.5.138:14239 store

查看结果 Disconnected 状态对应的 id 为 1,4

  1. 查看 schedule-limit 的值,修改为 0 ,并等待一段时间直到没有正在运行的调度了,即 pd-ctl 中 operator show 输出空列表。

tiup ctl pd -u 172.16.5.138:14239 config show grep schedule-limit

“hot-region-schedule-limit”: 4,

“leader-schedule-limit”: 4,

“merge-schedule-limit”: 8,

“region-schedule-limit”: 2048,

“replica-schedule-limit”: 64,

tiup ctl pd -u 172.16.5.138:14239 -i

config set leader-schedule-limit 0

config set region-schedule-limit 0

config set replica-schedule-limit 0

config set merge-schedule-limit 0

config set hot-region-schedule-limit 0

image

  1. 关闭正常的 up 节点

tiup cluster stop tidb-test -N 172.16.5.138:43641

关闭的节点通过 display 查看状态是 Disconnected

  1. 在关闭后的节点,使用 tikv-ctl 强制 Region 从多副本失败状态恢复服务

可以从中控机 scp tikv-ctl 到目标机器

scp /home/tidbtest/.tiup/components/ctl/v5.0.0-rc/tikv-ctl xxx

tikv-ctl --db /home/tidbtest/tidb-data/tikv-43641/db unsafe-recover remove-fail-stores -s 4,1 --all-regions

Starting component ctl: /home/tidbtest/.tiup/components/ctl/v5.0.0-rc/ctl tikv --db /home/tidbtest/tidb-data/tikv-43641/db unsafe-recover remove-fail-stores -s 4,1 --all-regions

removing stores [4, 1] from configurations…

success

  1. 修改参数配置为原参数值

tiup ctl pd -u 172.16.5.138:14239 -i

config set leader-schedule-limit 4

config set region-schedule-limit 2048

config set replica-schedule-limit 64

config set merge-schedule-limit 8

config set hot-region-schedule-limit 4

  1. 删除两个丢失数据的 tikv 的目录

cd /home/tidbtest/tidb-data

rm -rf tikv-43632

rm -rf tikv-43643

  1. 重启集群,这时候丢失的 data 目录会自动补数据,但是 tikv 日志会报重复 store 的错误

tiup cluster restart tidb-test

查看确认其他两个节点目录已经重新补充

查看 tikv 日志

[FATAL] [server.rs:590] [“failed to start node: Grpc(RpcFailure(RpcStatus { status: 2-UNKNOWN, details: Some("duplicated store address: id:4016 address:\"172.16.4.136:43641\" version:\"4.0.10\" status_address:\"172.16.4.136:43644\" git_hash:\"2ea4e608509150f8110b16d6e8af39284ca6c93a\" start_timestamp:1614139043 deploy_path:\"/home/tidbtest/tidb-deploy/tikv-43641/bin\" , already registered by id:88 address:\"172.16.4.136:43641\" state:Offline version:\"4.0.10\" status_address:\"172.16.4.136:43644\" git_hash:\"2ea4e608509150f8110b16d6e8af39284ca6c93a\" start_timestamp:1614133151 deploy_path:\"/home/tidbtest/tidb-deploy/tikv-43641/bin\" last_heartbeat:1614137661726372908 ") }))”]

查看集群状态

  1. 停止正常的 tikv 集群

tiup cluster stop tidb-test -N 172.16.5.138:43641

  1. 删除之前的 store id

tiup ctl pd -u 172.16.5.138:14239 -i

store delete 1

store delete 4

  1. 重启 tikv 集群后正常

tiup cluster restart tidb-test

5 个赞

大佬,这个重启集群是重启整个集群嘛?
我可以只单独重启tikv组件嘛?


实践了一下,
好像不行,因为直接启动tikv组件的话,tidb-data下的tikv目录并不会重新建立

1 个赞