纠删码
MinIO 将纠删码作为提供数据冗余和可用性的核心组件来实现。本页介绍了 MinIO 纠删码。
有关 MinIO 如何在生产部署中使用纠删码的更多信息,请参阅可用性和弹性和部署架构。
纠删码基础
注意
本节中的图表和内容展示了 MinIO 纠删码操作的简化视图,并不旨在代表 MinIO 完整纠删码实现的复杂性。
- MinIO 将每个服务器池中的驱动器分组到一个或多个相同大小的纠删集中。
上面的示例部署由 4 个节点组成,每个节点有 4 个驱动器。MinIO 初始化时会创建一个纠删集,该纠删集包含所有四个节点上的全部 16 个驱动器。
MinIO 在初始化服务器池时确定纠删集的最佳数量和大小。在此初始设置后,您无法修改这些设置。
- 对于每个写操作,MinIO 将对象分区为数据分片和奇偶校验分片。
纠删集的条带大小决定了部署可能的最大奇偶校验。确定要生成的数据分片和奇偶校验分片数量的公式是:
N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
上面的示例部署有一个包含 16 个驱动器的纠删集。这可以支持
EC:0和纠删集驱动器数量的 1/2 之间的奇偶校验,即EC:8。- 您可以将奇偶校验值设置在 0 和纠删集大小的 1/2 之间。
MinIO 使用 Reed-Solomon 纠删码实现,并将对象分区以分布在纠删集中。上面的示例部署的纠删集大小为 16,奇偶校验为
EC:4。如果您之后更改奇偶校验值,使用给定奇偶校验设置写入的对象不会自动更新。
- MinIO 需要至少
K个任何类型的分片才能读取一个对象。 这里的值
K构成了部署的读取法定数量。因此,纠删集必须至少有K个健康的驱动器来支持读取操作。此部署有一个离线节点,导致只剩下 12 个健康的驱动器。该对象是以
EC:4写入的,读取法定数量为K=12。因此,该对象保持了读取法定数量,MinIO 可以为读取操作重建它。MinIO 无法重建已失去读取法定数量的对象。这类对象可以通过其他方式恢复,例如复制重新同步。
- MinIO 需要至少
K个纠删集驱动器才能写入一个对象。 这里的值
K构成了部署的写入法定数量。因此,纠删集必须至少有K个可用的在线驱动器来支持写入操作。此部署有一个离线节点,导致只剩下 12 个健康的驱动器。客户端以
EC:4奇偶校验设置写入一个对象,该纠删集的写入法定数量为K=12。此纠删集保持了写入法定数量,MinIO 可以用它进行写入操作。- 如果奇偶校验
EC:M正好是纠删集大小的 1/2,则写入法定数量为K+1。 这可以防止出现裂脑类型的情况,例如网络问题将纠删集驱动器正好一半与另一半隔离。
此部署由于瞬时网络故障而有两个节点离线。客户端以
EC:8奇偶校验设置写入一个对象,该纠删集的写入法定数量为K=9。此纠删集已失去写入法定数量,MinIO 无法用它进行写入操作。K+1逻辑确保客户端不会潜在地将同一对象写入两次——一次写入纠删集的每一“半”。- 对于保持读取法定数量的对象,MinIO 可以使用任何数据或奇偶校验分片来修复损坏的分片。
一个
EC:4的对象由于驱动器故障,在 12 个数据分片中丢失了 4 个。由于该对象保持了读取法定数量,MinIO 可以使用可用的奇偶校验分片来修复那些丢失的数据分片。
使用 MinIO 纠删码计算器来探索您计划的拓扑可能的纠删集大小和分布。在可能的情况下,使用偶数个节点和每个节点偶数个驱动器,以简化拓扑规划和驱动器/纠删集分布的概念化。
驱动器的独占访问
MinIO 要求对提供给对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或个人都不应直接对提供给 MinIO 的驱动器或卷,或者 MinIO 放置在它们上面的对象或文件执行任何操作。
除非得到 MinIO 工程团队的指示,否则不要使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个。这类操作极有可能导致大范围的损坏和数据丢失,超出 MinIO 的修复能力。
纠删码奇偶校验与存储效率
为部署设置奇偶校验是在可用性和总可用存储之间取得平衡。较高的奇偶校验值以可用存储为代价,增加了对驱动器或节点故障的弹性,而较低的奇偶校验值则提供了最大的存储空间,但对驱动器/节点故障的容忍度较低。使用 MinIO 纠删码计算器来探索奇偶校验对您计划的集群部署的影响。
下表列出了在一个由 1 个节点和 16 个 1TB 驱动器组成的 MinIO 部署上,不同纠删码奇偶校验级别产生的结果。
奇偶校验 |
总存储 |
存储比例 |
读取操作所需的最少驱动器数 |
写入操作所需的最少驱动器数 |
|---|---|---|---|---|
|
12 Tebibytes |
0.750 |
12 |
12 |
|
10 Tebibytes |
0.625 |
10 |
10 |
|
8 Tebibytes |
0.500 |
8 |
9 |
位衰减保护
位衰减(Bit rot)是指存储介质层面因随机变化而导致的静默数据损坏。对于数据驱动器,这通常是代表数据的电荷或磁向衰减的结果。这些原因可能从停电时的小电流尖峰到导致位翻转的随机宇宙射线。由此产生的“位衰减”可能在数据介质上引起细微的错误或损坏,而不会触发监控工具或硬件。
MinIO 对 HighwayHash 算法的优化实现确保了它能即时捕获和修复损坏的对象。通过在应用程序读取时计算哈希并在写入时验证,跨网络、到内存或驱动器,确保了端到端的完整性。该实现为速度而设计,在英特尔 CPU 的单核上可以达到超过 10 GB/秒的哈希速度。