2.9. 了解簇重建

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

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

  • 如果使用了复制,则降级区块的现有副本将锁定(以确保所有副本保持一致),并且其中一个被复制到新 CS。如果在此时,客户端需要读取某些还未重建的数据,它将读取该数据任意剩余的副本。

  • 如果使用了擦除编码,则新 CS 将请求几乎所有剩余的数据片段以重建丢失的片段。如果在此时,客户端需要读取某些还未重建的数据,则该数据将不按顺序重建,然后读取。

注解

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

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

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

  1. 冗余模式所需的正常运行的节点数

  2. 足够的空闲空间以容纳任意一个节点可存储的数据量

第一个先决条件在以下示例中进行了解释。在以 5+2 擦除编码模式工作并且有七个节点(即,最低数量)的簇中,每条用户数据都被分发到 5+2 个节点用于冗余,即,使用了每个节点。如果一个或两个节点失败,则用户数据不会丢失,但簇将降级并且不能重建自身,直到至少七个节点都重新正常运行(即,直到添加了丢失的节点)。为了对照,在以 5+2 擦除编码模式工作并且有七个节点的簇中,每条用户数据都被分发到十个节点中的 5+2 个随机节点上,甚至分发到 CS 上的负载之外。如果最多有三个节点发生故障,则此类簇仍将有足够的节点重建自身。

第二个先决条件在以下示例中进行了解释。在具有 10 TB 节点的簇上,每个节点至少有 1 TB 应保持空闲,因此如果一个节点发生故障,可以在剩余的九个节点上重建其 9 TB 的数据。然而,如果簇有十个 10 TB 的节点和一个 20 TB 的节点,每个较小的节点应至少有 2 TB 的空闲空间,以免最大的节点发生故障(尽管最大的节点应有 1 TB 的空闲空间)。

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

  • 要简化重建,请在所有节点上保留统一的磁盘数和容量大小。

  • 重建会给网络带来额外的负载,并增加读取和写入操作的延迟。簇的网络带宽越大,将越快地完成重建和释放带宽。