1.这种region怎么清除? → 可以接受丢数据吗?如果可以,unsafe recover
1. 在 pd-ctl 中暂定如下调度
scheduler pause balance-leader-scheduler
scheduler pause balance-region-scheduler
scheduler pause balance-hot-region-scheduler
config set replica-schedule-limit 0
2. 使用 pd-ctl 检查大于等于一半副本数在故障节点上的 Region
要求:PD 处于运行状态
假设故障节点为 15,22,43,45,46
pd-ctl -u <endpoint> -d region --jq=’.regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length as $total | map(if .==(15,22,43,45,46) then . else empty end) | length>=$total-length) }’
3. 在所有正常的 tikv 实例上,对所有 Region 移除掉所有位于故障节点上的 Peer
要求:在所有未发生故障的机器上运行,需要关闭 TiKV 节点
## tikv-ctl --db /path/to/tikv-data/db unsafe-recover remove-fail-stores -s <s1,s2,....> --all-regions
这里 store id 为 30725906
tikv-ctl --db /path/to/tikv-data/db unsafe-recover remove-fail-stores -s 30725906 --all-regions
4. 使用 pd-ctl 检查没有 Leader 的 Region
要求:PD 处于运行状态
pd-ctl -u <endpoint> -d region --jq '.regions[]|select(has("leader")|not)|{id: .id, peer_stores: [.peers[].store_id]}'
5. 启动 tikv
6. 检查数据索引一致性
要求:PD、TiKV、TiDB 处于运行状态,例如:
select count(*) from table as c1;
select count(*) from table force index `idx_name` as c2;
select c1 = c2;
- 还有已经设置为墓碑模式下线的节点,在pd层面使用pd-ctl还能看见它的region,怎么清除已经下线的kv的region?–> 在处理完 1 操作后,Tombstone :表示该 TiKV Store 已处于完全下线状态,可以使用
remove-tombstone
接口安全地清理该状态的 TiKV。 from https://docs.pingcap.com/zh/tidb/stable/tidb-scheduling#信息收集 具体操作 → https://docs.pingcap.com/zh/tidb/stable/pd-control#store-delete--cancel-delete--label--weight--remove-tombstone--limit--store_id---jqquery-string