TiKV raft engine日志丢失Tikv恢复失败

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】在尝试测试单节点TiKV的恢复时,修改raft-engine的配置项 recovery-mode为 “tolerate-any-corruption” 并手动删除raft log文件,TiKV恢复失败

【应用框架及开发适配业务逻辑】测试在断电等异常情况导致文件丢失或损坏时, TiKV的恢复情况

【背景】
1, 修改raft-engine的配置项 recovery-mode为 “tolerate-any-corruption”
2,重启TiKV
3,应用层往TiKV入数据
4,手动删除raft-engine的末尾日志文件
5,停止入数据
6,重启TiKV,TiKV启动失败

【现象】 TiKV启动失败并报错 “[FATAL] [server.rs:950] [“failed to start node: Engine(Other("[components/raftstore/src/store/fsm/store.rs:1115]: \"[components/raftstore/src/store/peer_storage.rs:769]: [region 2] 3 validate state fail: Other(\\\"[components/raftstore/src/store/peer_storage.rs:595]: log at recorded commit index [8] 262607 doesn’t exist, may lose data, region 2, raft state hard_state { term: 8 vote: 3 commit: 103492 } last_index: 103494, apply state applied_index: 262607 commit_index: 262607 commit_term: 8 truncated_state { index: 262600 term: 8 }\\\")\""))”]”

【问题】 TiKV无法恢复

【业务影响】

【TiDB 版本】
tikv:v6.1.0
【附件】

可以按照以下步骤进行修复:

  1. 首先,您需要将raft-engine的配置项recovery-mode设置为“tolerate-any-corruption”,这将允许TiKV在发现数据损坏时继续运行。
  2. 然后,您需要重启TiKV,以便raft-engine的配置项生效。
  3. 接下来,您需要向TiKV写入一些数据,以便触发Raft状态机的恢复过程。
  4. 然后,您需要手动删除raft-engine的末尾日志文件,这将强制Raft状态机从先前的状态中恢复。
  5. 在删除日志文件后,您需要停止向TiKV写入数据。
  6. 最后,您需要再次重启TiKV,此时TiKV应该能够正常启动并恢复数据。

感谢回复,很遗憾,按照您说的步骤再重试了两次实验后仍然是无法重启,且报错一致。

在实验中,修改recovery-mode为tolerate-any-corruption后,重启tikv,入数据,停止入数据,然后truncate raft log文件,重启tikv,仍然报同样的错误。 这太不符合预期了!!!

@Billmay表妹 能麻烦表妹转给相关开发人员吗 :blush:

如果是默认tolerate-tail-corruption 可以吗?

## Determines how to deal with file corruption during recovery.
##
## Candidates:
##   absolute-consistency
##   tolerate-tail-corruption
##   tolerate-any-corruption
# recovery-mode = "tolerate-tail-corruption"