升级卡住

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.7
  • 【问题描述】:4.0.7 升级到 4.0.8 时 tikv 一直等待: Still waitting for 1 store leaders to transfer…

tikv.log

这是正常的日志,滚动升级过程中,为了防止避免对集群产生大的影响,在关闭一个 tikv 节点之前,会将这个 tikv 节点上的 leader 迁移到别的 tikv 节点上,等 leader 迁移完成之后再关闭重启这个 tikv 节点。 这个是在检测 tikv 节点上的 leade 是否已经全部迁移完成,如果迁移完成则可以重启。默认是是等待 300s 。可以通过 --transfer-timeout 参数控制。如果达到超时时间还没有迁移完 leader 会直接关闭 TiKV 进程。

在等待 111 节点迁移 leader 的时候,剩余 1 个 leader 无法迁移走,这个需要当时通过 pd-ctl 看下这个 stoer 剩余的 region 信息以及通过 pd leader 日志看下对应 region 的操作。

迁移不走 leader 这个正常是不会影响升级操作的,看集群信息还没有升级到 v4.0.8 这是因为 tiup cluster upgrade 报错了,还是人为取消了升级操作?

剩余 1 个 leader 一直无法迁移走,卡住1个多小时了

一直卡这就取消升级了,改成 强制升级了

如果下次升级的时候还是出现这个问题的话,可以在当时通过 pd-ctl 看下这个 stoer 剩余的 region 信息以及通过 pd leader 日志看下对应 region 的操作日志,确认一下 leader 一直没有迁移的原因。

线上迁移也出现了相同的问题,升级了一晚上还是卡着。怎么判断是哪个kv节点并且pd-ctl 如何查看剩余的region


https://docs.pingcap.com/zh/tidb/stable/pd-control#region-store-store_id

然后根据 region id 的信息看下 pd leader 节点的 pd.log 日志以及 tikv.log 看下操作情况

找到了对应的kv节点,tikv.log 截图如下:

拿到 store 上剩余的两个 region 的 id ,然后根据 region id
grep ‘region_id=xxxx’ 的方式将对应的 region 操作日志过滤一下,拿一下过滤之后的文本信息吧
pd-ctl 执行 region store x 的结果也可以贴一下

怎么拿到剩余的2个呢? 由于是生产环境,一直有新的leader产生,新的来了之后又进行 transfer ,但是剩余2个之后就卡住了

tiup ctl pd -u 192.168.1.102:2379 -i 连接 pd
>> stores 查看所有  store 节点的信息,根据 IP 找到正在迁移 leader 的 store 对应的  store_id
>> region store ${store_id} 看下迁移 leader 的 store 上剩余的 region ,看下对应剩余 leader 的 region  id
根据 region_id=xxx 过滤 pd.log 以及 tikv.log 日志

另外补充一下 pd-ctl 执行 stores 以及 config show all 的结果

store id为:2552676。执行 store 2552676 结果如图:

%E5%9B%BE%E7%89%87

执行 region store 2552676 的话显示的结果非常多,无法看到剩余的region

这个store 只剩2个leader 时的截图日志:

pd-ctl 执行一下

>> region --jq=".regions[] | {id: .id, leader_store_id: .leader.store_id | select(.==2552676) }"

并根据结果的 id 执行一下

region ${region_id}

yum install jq 安装一下这个命令可以么

现在leader又有1000多个了,等降下来之后我再执行一次 region --jq