TiKV下线卡住

【TiDB 版本】 2.1.6,ansible部署

【集群节点分布】

【问题】 尝试用pd-ctl下线TiKV2-1:-d store delete 5

发现该store的state_name由up变为offline,region_count由7109逐渐下降,但降到10后卡住,不再下降,state_name也一直不变为tombstone。

请问为什么?如何解决?

  1. 通过 pd-ctl 看下 store 上剩余 10 个region的信息是怎么样的
  2. 方便的话,可以提供一下 pd leader 节点的的日志以及对应 store 节点的 tikv.log 日志

相关日志如下:

log.rar (4.3 MB)

1、store 5 上的 region 发现存在 down_peers 和 pending_peers,确认下这些 peer 所在的 store 节点是否存在,可以使用 pd-ctl 把 learner 为 true 的 peer remove 掉;

2、如果还是无法及时下线,尝试手动 transfer leader 和 transfer region 操作将剩余的 8 个 region transfer 到其他正常的 store 上 。

  1. 其实我是同时下线TiKV2-1和TiKV2-2的,二者都卡住了。关注到二者同属于1个label(3台机器,3个label)。请问,这会不会有影响?导致下线卡住?
  2. 我想尝试TiKV2-1和TiKV2-2先后分别下线。但是现在state_name卡在offline了。请问,如何将其状态改为up?(pdctl未找到上线store的命令)

1、如果 label 设置正确的话,TiKV2-1和TiKV2-2 可以同时下线,不会导致下线卡住,检查下 inventory.ini 中的 labels 和 location_labels 是否设置正确

2、offline 状态可以通过 curl -X POST http://{pd_ip}:2379/pd/api/v1/store/${store_id}/state?state=Up 修改为 Up 状态

  1. 针对你说的“确认下这些peer所在的store节点是否存在”。

请问,正在下线的TiKV2-1和TiKV2-2对应的store也认为存在吗?如果也认为存在的话,那么所有的down_peers和pending_peers所在的store节点都存在。

ps:有1个down_peers/pending_peersr的store_id在TiKV2-2上。

  1. pd-ctl -d region store 5部分结果如下:

请问,learner为true的peer是类似于36758这样的peer吗?

  1. 请问,如何使用pd-ctl把learner为true的peer remove掉?

1、如果是正在下线的节点,不应该是 down 的状态,pd-ctl > store 10 看下结果,方便的话发一下 store 命令的结果;

2、learner 为 true 的 peer 是类似于 36758 这样的 peer, operator add remove-peer <peer_id> <store_id>,文档中有示例。

store 10为Up状态:

如果各个 store 状态都是 Up,且 peer 的 leaner 状态一直没有改变,可能是 tikv send 或 get snapshot 卡住了,先 remove 掉这些异常状态的 peer 再做下线。

  1. 根据官网说明:

请问,pd-ctl -d operator add remove-peer 36758 5后,还需要执行tikv-ctl的操作吗?

  1. 另外,官网给的命令说明,跟的是region_id,而不是peer_id。

image

请问,该命令能删除learner为true的peer吗?

  1. remove掉所有异常状态peer后,就等着观察store的state_name变为 tombstone了?这样直接删除peer会不会丢数据啊?

1、这个场景不需要使用 tikv-ctl 命令操作 region,region 的 tombstone 状态跟 store 的 tombstone 状态不是一个概念

2、可以删除 learner 的 peer,按照文档的说明为准

3、默认每个 region 有 三个副本,删除异常状态的 peer,只要保证有至少两个正常的 peer(包括 leader),会自动补副本,不会丢数据

要下线的store 5的region信息如下:

针对36758的peer,若想删除它,

请问是

pd-ctl -d operator add remove-peer 35224 5

还是

pd-ctl -d operator add remove-peer 35224 10

pd-ctl -d operator add remove-peer 35224 10

目前3台机器,每台机器2个TiKV,打1个label,详细信息参见问题描述中的图片。现在同时下线TiKV2-1和TiKV2-2,也就是labels="host=tikv2"整体下线。这样是否就不满足3副本了,会有影响吗?

不满足3副本无法完成下线操作,tikv 不会变成 tombstone,3 副本需要保证至少 3 个节点(相同 label 的算一个)。

那单独下线TiKV2-1是否就没有问题了?

没问题

尝试下线再上线后,一切顺利。但是grafana界面显示有些异常,如下图所示:

图中框住的地方显示TiKV已经全部Up,但为什么还有2个为Tombstone?

pd-ctl -d store结果也显示所有store为Up状态。

请问现在还有问题吗?