多replica情况下,某一storaged是否可快速摘除

基于nebula v1.1部署了一个6机器3replica的集群,但是线上运行过程中有一台编号为003的机器出现了SSD盘故障、数据可能已经有损坏、没有RAID;

请问这个时候怎么快速把003机器摘掉,是否可直接kill 003的storaged?并且kill后5台机器可正常提供读写服务;
如果可以,kill后怎么把003从集群标记为已摘除 并且新加入的机器007自动继承003的replica?(003已被kil,并且killl后就直接丢弃了,不会再加入到集群,这个时候部分partition的replica为2)

顺便问一下,nebula有对数据做checksum校验么?比如盘上有脏数据了怎么发现;
我看nebula对磁盘的使用主要是两点,rocksdb和nebula自己的wal,rocksdb我理解有自己的checksum机制、但是nebula的wal貌似没有checksum,所以盘损坏了、nebula是有可能存入脏数据的、并且脏数据可能传播到集群内其它机器?

是的话,需要增加checksum的应该就只剩nebula的wal了吧

1 个赞

这不是就是多副本的高可用的本意吗?

是这样没错,但我问题的重点是怎么操作、是否有可行操作路径;
我看源码以及实操有两个问题:

  1. wal没做checksum,所以如果leader磁盘受损,那么可能会有脏数据、且存在脏数据入侵到集群其它机器的可能;
  2. 摘机器需要被摘机器处于online状态,这个我实操了下、被摘机器如果是offline则摘不掉(balance remove会立刻失败,且文档没看到其它摘机器手段),实际使用中如果机器出现故障我想第一时间直接干掉它并没打算恢复到集群,不能因为balance data remove的实现而限制了这一点 使得被摘机器必须处于online,并且机器被摘掉后我会找新机器进来承担被摘掉的replica、直接执行balance data就可以把被我直接kill的storaged的replica迁移到新机器么?

所以我的问题是落地的路径 (是否有可行路径只是我没找到),没有怀疑架构上的理论知识 :slightly_smiling_face:

目前扩缩容需要满足以下条件

  1. 机器数量大于副本数
  2. 机器状态online

关于实际机器down的情况,个人建议发生这种情况的时候直接从老机器取下来data盘mount到新机器上跑(如果盘没挂的情况)

补充一点:off-line状态的机器默认1天会从list里删除,由“removed_threshold_sec”这个参数控制。可以通过改短这个时间,再加入新机器去balance data。否则就只能重新导数据来应对机器挂掉的情况了。

1 个赞

@George 如果副本数小于机器数量就会balance data remove失败是么?我是3副本,3节点,这种情况下是不可以变成两节点的对吗?

由于raft协议的原理限制:
1、需要进行基于quorum的选举,副本数量必须是奇数。
2、3副本3节点不建议缩容

比较理想的情况比如:5台机器,3副本,做个缩容是OK的。
关于缩容的具体操作可以参照文档:
缩容FAQ
移除Storage服务器
均衡分片分布

浙ICP备20010487号