出现region not found for key时可能出现空洞应该怎么修复呢?

【 TiDB 使用环境】生产环境
【 TiDB 版本】4.0.1
【遇到的问题】
系统出现故障后,tidb的日志里出现了一些region not found for key,有些语句卡住写不进去。
在pd-ctl上跑命令 region --jq “.regions| .start_key,.end_key” |sort -nr |uniq -u
能跑出一些 key对,这种情况如果要填补这些空洞要怎么处理呢?


【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

region 的副本丢失了么?

有可能丢了两副本,但是有些key报region not found一整天了写不进去。

哪你得先找一下 哪些 region 可能出问题了,然后这些 region 在哪些 tikv 节点上

最简单的办法,就找到这些节点后,先迁移 leader,然后先扩容,在缩容,把这些有问题的节点下线就可以了(因为不存在leader,下线会十分快)

这个办法觉得不好使,哪只能参考下面的文档,对 region 进行修复了
region 修复有两种情况:

  • 丢了两个副本 (这个还有得救)

  • 丢了三个副本 (只能有损恢复)

这些都做了。
现在的问题是有些key始终找不到region了,可能是对应的range是没有region的。
在pd-ctl上跑命令 region --jq “.regions[]| .start_key,.end_key” |sort -nr |uniq -u
能跑出一些key对,这种情况如果要填补这些空洞要怎么处理呢?

recreate-region 
Recreate a region with given metadata, but alloc new id for it

参考下面的文档,用这个命令,在所在的 tikv 节点创建几个空的region

这里不是空region,是有start key, end key没有region,需要在某些 start key end key之间新建一个region吧。文档过于复杂,不懂得怎么操作。

region id 不存在,发的这个指令好像不能解决问题。

对应的key找不到region,不存在对应的region id。

哪直接把PD 中相关的元数据删掉吧,执行的话,选择 pd leader

curl -X DELETE http://${HostIP}:2379/pd/api/v1/admin/cache/region/{region_id}


一般都会选择创建空的region,然后让pd 主动合并掉,这样会更安全

key找不到对应的region id,这里的region id填什么?

tidb完整的报错信息贴下,感觉是region 分裂或合并后的问题。如果只是region 正常分裂或合并只是region cache元信息有问题的话,对于tidb server内的region cache可以重启tidb server,如果是PD的信息也不正确可能需要重建PD,貌似目前没有直接清理pd 内region信息的命令。 另外你的版本有点低 4.0最新版是4.0.16 建议升级

key 找不到 region,key 和 region 的对应关系可以拿到的,region id 不就有了么

https://docs.pingcap.com/zh/tidb/stable/pd-control#region-key---formatrawencodehex-key

如果觉得太复杂的话,重建一个环境吧 :rofl:

如果有时间,可以分享下这个情况是怎么发生的…

确实太复杂了。还丢了数据,感觉重建一下还快一些。

我试了用raw key也找不到region

另外说个事,昨天有一个机器down掉了,上面有两个tikv节点,打的相同的label。结果发生有59个region一直leader在down掉的机器上迁移不走,用pd-ctl一看发现这59个region都有两个节点在这个机器。完犊子,一下子丢了两副本。想请问这是低版本可能产生的bug吗?

4.0.x 需要更新的,低版本确实很多bug

俩副本丢失,不会丢数据的,只不过服务无法提供了,及时恢复没啥问题的

所以4.0版本掉一个机器可能丢两个副本这个也是已知问题吧?

tikv 的 labes 会 限制 region 同一节点,只允许一个副本 (以此来保证高可用【包括后续的机架感知,多DC等场景】)

至于你说的哪个情况,是不是配置上出了问题?可以总结一下,然后复盘

配置上应该没有问题。在pd上看到的这两个节点打的相同的label。但是确实也有59个region有两个peer分别在这两个在一个机器的tikv节点上。和预期严重不符。