簇重建

存储簇可自我修复。如果节点或磁盘出现故障,簇将自动尝试恢复丢失的数据,即,重建自身。

重建先决条件

若使簇能够重建自身,它必须至少具备:

重建过程

重建过程包括几个步骤。每个 CS 将每隔 5 秒钟将一条反馈消息发送给 MDS。如果未发送反馈,则 CS 将被认为非活动状态,MDS 会通知所有簇组件,它们停止请求对其数据的操作。如果 15 分钟内未收到来自 CS 的反馈,MDS 会认为 CS 脱机,并开始簇重建。在此过程中,MDS 会查找没有丢失数据副本的 CS,并恢复数据(一次一个副本),如下所示:

  • 如果使用了复制,则降级区块的现有副本将锁定(以确保所有副本保持一致),并且其中一个被复制到新 CS。如果在此时,客户端需要读取某些还未重建的数据,它将读取该数据任意剩余的副本。
  • 如果使用了纠删码,则新 CS 将请求几乎所有剩余的数据片段以重建丢失的片段。如果在此时,客户端需要读取某些还未重建的数据,则该数据将不按顺序重建,然后读取。

如果使用了复制,自我修复需要更多的网络流量和 CPU 资源。另一方面,使用擦除代码进行重建将更慢。

如果在维护期间,节点或磁盘脱机,将延迟集群自我修复以节省集群资源。默认延迟为 30 分钟。通过使用 vstorage -c <cluster_name> set-config 命令以毫秒设置 mds.wd.offline_tout_mnt 参数来调整它。

簇重建的建议

有两个建议可帮助消除重建开销:

  • 要简化重建,请在所有节点上保留统一的磁盘数和容量大小。
  • 重建会给网络带来额外的负载,并增加读取和写入操作的延迟。集群的网络带宽越大,完成重建和释放带宽的速度就越快。