TiKV 报错 ERRO panic_hook.rs:104 是什么原因

报错信息如下:

ERRO panic_hook.rs:104: thread ‘raftstore-11’ panicked ‘[region 125868]323807 to_commit 181879 is out of range [last_index 181878]’ at "/home/jenkins/.cargo/git/checkouts/raft-rs-841f8a6db665c5c0/b10d74c/src/raft_log.rs:248"3.2019/04/30 18:11:27.625 ERRO panic_hook.rs:104: thread ‘raftstore-11’ panicked ‘[region 125868]323807 to_commit 181879 is out of range [last_index 181878]’ at “/home/jenkins/.cargo/git/checkouts/raft-rs-841f8a6db665c5c0/b10d74c/src/raft_log.rs:248” stack backtrace:stack backtrace:

原因: to_commit out of range 意味着这个 peer 想要 commit 一条不存在的日志,说明因某些主动操作或者异常情况发生导致最近的 raft log 丢失了。

解决方法:

  1. 通过 tikv-ctl 工具定位损坏的region,指定 db 目录(当前损坏 tikv 节点的目录)。
  2. 通过 tikv-ctl 进行数据修复。
  • 2.1 如果修复失败。如下:
set_region_tombstone: StringError("The peer is still in target peers")

使用tikv-ctl 执行 region tombstone 需要对损坏节点 region peer 进行判断,需要人工清理。remove 掉异常的 peer。

  • 2.2 重复使用 tikv-ctl 工具执行修复即可。

tikv-ctl 工具使用请参考 PingCAP 官网

您好,指定tikv db目录时出现找不到region的情况。

问题已经找到了,需要在tikv节点下,复制一份tikv-ctl工具,这样才能执行。麻烦了