tikv报错region 9555] entry at apply index 7563240 doesn't exist, may lose data.

给你解释下启动流程,你看看有没有必要搞吧。

  1. tikv 启动的时候,会读取 rocksdb-kv 中的 raft cf 中的 region 信息,然后根据 region 信息构建内存对象(包括 raft 通讯之类的东西都通过这个构造),构造过程中会根据 apply_state(在 rocksdb-kv 中) 、raft_state(在rocksdb-raft 中) 判断是不是有没应用的数据,你的实例就是在这个过程中出错了。

  2. 如果没出错,启动了,leader 上报心跳给 pd ,pd 才能把所有的删 region 之类的动作发给 leader 去操作。

所以2种解决办法:

  1. 删掉 rocksdb-kv 中的 region 信息
  2. 根据 rocksdb-kv 种的 region 信息,重写 rocksdb-raft 中的数据,让整个 region 就好像没收到最后一条proposal 一样,这种改法最好,但是不知道 tikv 有没有现成工具。如果你的集群没那么重要,估计也没必要这样折腾了,如果很重要,可以用 c++ 写个工具,读取 tikv 的 rocksdb,修改里面 key 的数据实现 2 或者 1 的效果。 实现 2 的效果比较难, 实现 1 的效果,懂 c++ 的话,也就个把小时搞定。