关于tikv集群缩容和扩容的问题

版本:4.10
背景:
3个tikv节点的tidb集群,store id分别是1、4、5,在pd-ctl上 执行store delete 4 和store delete 5,然后对应的store 4 和5的state_name=“offline”,pd日志如下:[“store may not turn into Tombstone, there are no extra up store has enough space to accommodate the extra replica”]

问题:
1、删除store 4和5是否删除成功?这样会把所有的region和对应的peer都驱逐到store 1上?
2、如果执行store delete 5,发现发现store id搞错,能否能否执行store delete 5的逆操作,再把id=5的store 加进来呢?

谢谢!

1.可以删除掉 store 4 和 5 ,但这样会导致 region 发生多副本丢失,因为每个 store 上只能存放 region 一个副本,所以同时删除两个 store 后不会将 region 所有副本都迁移到 store 1 上;
2.已经执行过 store delete 操作后,无法直接把该 store 再加回来,需要重新扩容一个 tikv 节点,让 region 在新 tikv 节点上将 region 副本数据补上。

比如id=5的store是1.1.1.1:10001,如果我想加回来,只要这个store的ip和port不同于原来的就可以,其实我向继续加1.1.1.1:10001

store 5 的信息如果完全从集群删除之后,重新添加该 IP 和 port 的节点后会以一个新 store id 号加入到集群中,你自己可以测试下。

现在集群是3个tikv,store id 5 =1.1.1.1:10001,store id 4 =2.2.2.2:10001,执行了store delete 4和store delete 5命令一天后,“state_name”: “Offline”,此时为了数据安全,我想再把id=4和id=5的store再加回来,需要怎么操作?

这里的完全删除是store_name从offline–》tombstone–》完全下线吗? 但是目前的状态offline,并且已经持续了一天多的时间,region count很少才几十个。

这里 store 4 和 store 5 都处于 offline 状态,offline 状态变成 tombstone 状态需要完成所有 region balance 和 region leader 的 transfter,但现在由于只有一个 tikv 无法完成该调度任务,所以 store 4 和 store 5 会一直卡在 offline 状态,而且两个节点也无法直接添加到集群中,可以考虑再扩容两个 tikv 节点,让 region 迁移到新 tikv 节点上,这样 store 4 和 store 5 可以完成下线步骤。

嗯,多谢,目前看只能这样了!这种设计真的蹩脚,为什么不可以逆向操作呢 如果数据量很大话,这个超级麻烦.

TiKV 中 Region 与副本之间通过 Raft 协议来维持数据一致性,任何写请求都只能在 Leader 上写入,并且需要写入多数副本后(默认配置为 3 副本,即所有请求必须至少写入两个副本成功)才会返回客户端写入成功。3 节点 TiKV 一次性删除两个 KV 节点本身就不是正规的操作,生产环境很可能会导致数据发生丢失,尤其在数据量很大的情况下,请谨慎操作。