[FAQ] 在线集群使用 Lightning 离线模式导入数据,导致 TiKV Panic

[问题澄清]

在在线集群使用 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 ,会造成数据版本丢失
请特别关注

[解决办法]

  1. 停止tikv 对应集群
  2. 查看 tikv log 查找错误的 region id 并记录
  3. 备份 tikv 的 物理数据
  4. 使用与 tidb 版本一致的 tikv-ctl 进行 错误 region 删除 。确保 tikv-ctl 命令 在 tikv 实例服务器上执行,并满足服务器权限需求
    tikv-ctl --db <path-to-db> tombstone -r <region> --force
  5. 启动 tikv server 确认 启动成功
  6. 重复 3-5 步骤 将所有问题 tikv 进行恢复
  7. 拉起 tidb 集群
  8. 检查当前集群模式 是否是 非 Normal 模式
    ./tidb-lightning-ctl --fetch-mode --tidb-host {tidbip} --tidb-status xxx
  9. 切换成正常模式:
    ./tidb-lightning-ctl --fetch-mode --tidb-host {tidbip} --tidb-statu --switch-mode=normal
  10. 清理 lightning 导入异常的库表
  11. 择机对数据表进行 check table 操作 确认数据正常
  12. 清理掉 tikv 上的备份数据

[相关 issue]

https://github.com/tikv/tikv/issues/9496

1 个赞