[问题澄清]
在在线集群使用 lighting 导入数据,可能会造成 lightning 与 tikv 对导入结果的共识不一致情况,此时 lightning 认为导入 sst 错误会重新导入,tikv 认为导入成功会删除 对应 sst。最终导致 tikv panic
[问题确认]
通过tikv 日志可以看到 如下报错
[2021/01/14 19:42:33.094 +08:00] [ERROR] [sst_importer.rs:92] [“ingest failed”] [err_code=KV:SSTImporter:RocksDB] [err=“RocksDB read metadata from /data/deploy/data/import/3b719d18-7195-4843-bb4e-00444b53faca_434317_7_4204_write.sst: Os { code: 2, kind: NotFound, message: "No such file or directory" }”] [meta=“uuid: 3B719D1871954843BB4E00444B53FACA range { start: 748000000000002DFFB95F728000000000FF1400E00000000000FA end: 748000000000002DFFB95F728000000003FF3F16980000000000FA } cf_name: "write" region_id: 434317 region_epoch { conf_ver: 7 version: 4204 }”]
[郑重声明]
使用以下方法 进行 tikv 拉起,不能保证导入数据的可用性,如果您的 TiKV sync-log 设置未 false ,会造成数据版本丢失
请特别关注
[解决办法]
- 停止tikv 对应集群
- 查看 tikv log 查找错误的 region id 并记录
- 备份 tikv 的 物理数据
- 使用与 tidb 版本一致的 tikv-ctl 进行 错误 region 删除 。确保 tikv-ctl 命令 在 tikv 实例服务器上执行,并满足服务器权限需求
tikv-ctl --db <path-to-db> tombstone -r <region> --force
- 启动 tikv server 确认 启动成功
- 重复 3-5 步骤 将所有问题 tikv 进行恢复
- 拉起 tidb 集群
- 检查当前集群模式 是否是 非 Normal 模式
./tidb-lightning-ctl --fetch-mode --tidb-host {tidbip} --tidb-status xxx
- 切换成正常模式:
./tidb-lightning-ctl --fetch-mode --tidb-host {tidbip} --tidb-statu --switch-mode=normal
- 清理 lightning 导入异常的库表
- 择机对数据表进行 check table 操作 确认数据正常
- 清理掉 tikv 上的备份数据