TiKV 变成 Offline 后仍然成为 region follower

  • 【TiDB 版本】:v3.0.5
  • 【问题描述】:在 pd-ctl 中将某个 TiKV 节点设置为 Offline 状态后,该节点仍然会成为相关 region 的 follower,而且下线很长一段时间也无法变更为 tomestone 状态

确认集群有几个 TiKV 节点,默认三副本下,集群三个 TiKV 节点,下线某个 TiKV 后无法变更为 tombstone 状态;如果有多于三个 TiKV,检查 PD 是否存在其他 TiKV 的 evict 调度策略,另外如果有 region 存在缺少多数副本的情况也会导致无法调度。

10 个节点缩减成 7 个,之前并没有 evict 调度策略的。

region 存在缺少是通过哪个指标来判断?region_balance_ratio?

目前 leader_balance_ratioregion_balance_ratio 均为 100%

PD监控页面 region_health

miss-peer-region-coount 为 31

1、检查是否有多副本或者少副本可以通过 pd-ctl 相关的命令查看

https://pingcap.com/docs-cn/stable/reference/tools/pd-control/#region-check-miss-peer--extra-peer--down-peer--pending-peer--incorrect-ns

2、使用 pd-ctl 查看下各个 store 当前的状态

3、pd 监控面板 region health 、Scheduler(整个面板),包括 delete store 前后的时间段的监控情况请提供下

是有几个 miss-peer 存在下线的节点中

请提供下上面提到的相关信息

当前的 store 状态:

最近一段时间的 region_health 状态,上升的曲线是开始执行 store delete {store-id}

下面是 Schduler 面板的部分信息,其中 evict-leader 三个策略是刚刚手动增加的

1、因为屏蔽了 ip 和 store id ,请确认下,在 scheduler 面板中的 balance leader movement 和 balance region movement 是否都是在将下线节点的 leader 或者 region 向非下线的 7 个节点调度。

2、“其实 evict-leader 三个是刚刚手动增加的”,这句话是什么意思?是说手动的添加了 evict-leader 的调度吗?请使用 pd-ctl 命令查看下当前环境中的 scheduler show 情况,参考命令如下:

https://pingcap.com/docs-cn/stable/reference/tools/pd-control/#scheduler-show--add--remove

3、使用 pd-ctl 命令查看下各个 store 中 leader 和 region 数量,参考命令如下:

https://pingcap.com/docs-cn/stable/reference/tools/pd-control/#store-delete--label--weight-store_id--jqquery-string

没有任何一个下线节点在执行 balance leader movement ,有两个下线节点在执行 balance region movement

evict-leader 调度是我手动加上的。下图是当前的所有 scheduler

WX20200102-115037%402x

至于 store 的 leader 和 region 数量,下线的三台节点,其中两台已经无 leader,剩余一台还有 200 来个,正常的节点 leader 数量是在 50k 左右。下线节点的 region 数量保持在 10k 左右,正常的节点 region 数量是 120k 的样子。

1、此次下线节点是 1,4,5 吗?

2、从上面的信息来看,请使用 pd-ctl region check miss-peer 看下是否有缺少 peer 的 region

3、可以观察下,下线 store 的 leader 和 region 数量是否在逐渐减少。如果在逐渐减少,表示调度还在进行。此处也可以看下 pd 监控面板的 operator 部分或者 scheduler 部分。如果想要加速调度,可以参考下述文档:

https://pingcap.com/docs-cn/stable/reference/best-practices/pd-scheduling/#节点下线速度慢

是这批 id。下线的节点中有缺少 peer 的 region,主要是在 id = 1 和 id = 5 的 store 上。

region 数量缩减得非常缓慢,基本可以忽略不计。

1、先将缺少 peer 的 region 手动的补充 peer,因为在缺失 peer 的情况下,也会影响下线调度。add peer 的命令可参考:

https://pingcap.com/docs-cn/stable/reference/tools/pd-control/#operator-show--add--remove

2、另外检查下剩余 online 的 7 个 store 磁盘空间是否充足,是否已用空间超过了 80%

3、当前环境中 empty region 较多 18w+,在下线 store 时,可以暂时关闭 region merge,减少 region merge 对下线的影响。节点下线完成后,再开启。关闭方式请参考:

https://pingcap.com/docs-cn/stable/reference/tools/pd-control/#operator-show--add--remove

4、如果是下线速度慢,那么可参照下述连接适当调整参数,加快下线:

https://pingcap.com/docs-cn/stable/reference/best-practices/pd-scheduling/#节点下线速度慢

即使将所有的 miss-peer 修复了并停止 region merge 行为,整体基本也没什么进展。

而且有个很奇怪的现象,其中的某个 store 启用了 evict-leader-scheduler,依然有 200 多个 leader 一直保持着在该节点上。

尝试用 pd-ctl operator add transfer-leader 命令 transfer 某个 leader 看是否能成功, 并用 operator show admin 查看当前的调度是否正常,如果异常,region 命令检查下该 leader region 的三副本的分布和状态是否正常。

手动增加 transfer-leader 操作可以瞬时将某个 regionleader 进行迁移。

当前查看 operator 的调度状态,并没有看到任何的 transfer-peer 或者 transfer-region 操作。

好奇对于下线 TiKV 节点还有没有别的更粗暴点的办法?

默认三副本并且不存在缺少副本的情况下,如果关闭其中一个 tikv,该 tikv 上的 region leader 在选举时间超时后会在其他 tikv 的 region 上选出新 leader,且默认三十分钟后会在其他 tikv 上补充缺少的副本,如果 region 数量比较多,比如每个 tikv 上有数万个 region,扫描这些 region 需要花费较长时间,可能影响补副本或调度的速度,如果希望更快的下线,可以调大相关的调度参数或手动执行调度操作。

直接关闭某个 TiKV 的话,最终 PD 状态会从 Offline 变更为 Tomestone