机器挂掉了,tikv无法启动, 集群异常不可用

1、请先检查下,当前环境中是存在不存在 leader 以及副本丢失的 region,参考命令如下:

  • 没有 leader 的 region
    pd-ctl -u http://{pd_ip}:2379 -d region --jq '.regions[]|select(has("leader")|not)|{id: .id,peer_stores: [.peers[].store_id]}'

  • 副本丢失的 region
    pd-ctl -u http://{pd_ip}:2379 region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length != 2)}" // 当前环境中 max-replicas 参数为 2

2、如果存在没有 leader 的 region,并且确认是 region 的多副本丢失,请参考下面的数据修复步骤进行修复:

(1) 故障节点 store 15 以及 store 5先 stop 并且不要启动,并且在下述参考的修复操作步骤 (1)~(3) 执行期间这两个 store 务必保持 stop 状态

(2) region 多副本丢失,asktug 有下述贴子可供参考:
https://asktug.com/t/topic/34246

(3) 当使用上述帖子的方式恢复集群,恢复的参考指标为:

  • 当前环境中不存在缺少副本的 region,下述命令返回为空:
    pd-ctl -u http://{pd_ip}:2379 region --jq=“.regions | {id: .id, peer_stores: [.peers.store_id] | select(length != 2)}”

  • 当前环境中不存在缺少 leader 的 region,下述命令返回为空:
    pd-ctl -u http://{pd_ip}:2379 region --jq ‘.regions|select(has(“leader”)|not)|{id: .id,peer_stores: [.peers.store_id]}’

(4) 此时,原故障节点 store 15 以及 store 5 一定要继续保持 stop 状态,并使用下面的命令将故障节点的状态设置为 Tombstone,并清理信息:

  • curl -X POST ‘http://<pd_ip>:<pd_port>/pd/api/v1/store/{store_id}/state?state=Tombstone’ // {store_id} 分别为故障 store 5 以及 15
  • 查询 tombstone 节点信息:curl pd-addr:port/pd/api/v1/stores?state=2
  • 调用 remove-tombstone api 清理 tombstone 节点信息

(5) 设置 sync-log 参数为 true ,并且将 region 副本设置为 3,避免这样的情况再次发生。
(6) 清理原故障节点 store 15 以及 store 5 上的数据,并重新 scale-out 进行扩容。