文档

纠删码

MinIO 将纠删码作为提供数据冗余和可用性的核心组件来实现。本页介绍了 MinIO 纠删码。

有关 MinIO 如何在生产部署中使用纠删码的更多信息,请参阅可用性和弹性部署架构

纠删码基础

注意

本节中的图表和内容展示了 MinIO 纠删码操作的简化视图,并不旨在代表 MinIO 完整纠删码实现的复杂性。

MinIO 将每个服务器池中的驱动器分组到一个或多个相同大小的纠删集中。
Diagram of erasure set covering 4 nodes and 16 drives

上面的示例部署由 4 个节点组成,每个节点有 4 个驱动器。MinIO 初始化时会创建一个纠删集,该纠删集包含所有四个节点上的全部 16 个驱动器。

MinIO 在初始化服务器池时确定纠删集的最佳数量和大小。在此初始设置后,您无法修改这些设置。

对于每个写操作,MinIO 将对象分区为数据分片和奇偶校验分片。

纠删集的条带大小决定了部署可能的最大奇偶校验。确定要生成的数据分片和奇偶校验分片数量的公式是:

N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
Diagram of possible erasure set parity settings

上面的示例部署有一个包含 16 个驱动器的纠删集。这可以支持 EC:0 和纠删集驱动器数量的 1/2 之间的奇偶校验,即 EC:8

您可以将奇偶校验值设置在 0 和纠删集大小的 1/2 之间。
Diagram of an object being sharded using MinIO's Reed-Solomon Erasure Coding algorithm.

MinIO 使用 Reed-Solomon 纠删码实现,并将对象分区以分布在纠删集中。上面的示例部署的纠删集大小为 16,奇偶校验为 EC:4

如果您之后更改奇偶校验值,使用给定奇偶校验设置写入的对象不会自动更新。

MinIO 需要至少 K 个任何类型的分片才能读取一个对象。

这里的值 K 构成了部署的读取法定数量。因此,纠删集必须至少有 K 个健康的驱动器来支持读取操作。

Diagram of a 4-node 16-drive deployment with one node offline.

此部署有一个离线节点,导致只剩下 12 个健康的驱动器。该对象是以 EC:4 写入的,读取法定数量为 K=12。因此,该对象保持了读取法定数量,MinIO 可以为读取操作重建它。

MinIO 无法重建已失去读取法定数量的对象。这类对象可以通过其他方式恢复,例如复制重新同步

MinIO 需要至少 K 个纠删集驱动器才能写入一个对象。

这里的值 K 构成了部署的写入法定数量。因此,纠删集必须至少有 K 个可用的在线驱动器来支持写入操作。

Diagram of a 4-node 16-drive deployment where one node is offline.

此部署有一个离线节点,导致只剩下 12 个健康的驱动器。客户端以 EC:4 奇偶校验设置写入一个对象,该纠删集的写入法定数量为 K=12。此纠删集保持了写入法定数量,MinIO 可以用它进行写入操作。

如果奇偶校验 EC:M 正好是纠删集大小的 1/2,则写入法定数量K+1

这可以防止出现裂脑类型的情况,例如网络问题将纠删集驱动器正好一半与另一半隔离。

Diagram of an erasure set with where Parity ``EC:M`` is 1/2 the set size

此部署由于瞬时网络故障而有两个节点离线。客户端以 EC:8 奇偶校验设置写入一个对象,该纠删集的写入法定数量为 K=9。此纠删集已失去写入法定数量,MinIO 无法用它进行写入操作。

K+1 逻辑确保客户端不会潜在地将同一对象写入两次——一次写入纠删集的每一“半”。

对于保持读取法定数量的对象,MinIO 可以使用任何数据或奇偶校验分片来修复损坏的分片。
Diagram of MinIO using parity shards to heal lost data shards on a node.

一个 EC:4 的对象由于驱动器故障,在 12 个数据分片中丢失了 4 个。由于该对象保持了读取法定数量,MinIO 可以使用可用的奇偶校验分片来修复那些丢失的数据分片。

使用 MinIO 纠删码计算器来探索您计划的拓扑可能的纠删集大小和分布。在可能的情况下,使用偶数个节点和每个节点偶数个驱动器,以简化拓扑规划和驱动器/纠删集分布的概念化。

驱动器的独占访问

MinIO 要求对提供给对象存储的驱动器或卷进行独占访问。任何其他进程、软件、脚本或个人都不应直接对提供给 MinIO 的驱动器或卷,或者 MinIO 放置在它们上面的对象或文件执行任何操作。

除非得到 MinIO 工程团队的指示,否则不要使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个。这类操作极有可能导致大范围的损坏和数据丢失,超出 MinIO 的修复能力。

纠删码奇偶校验与存储效率

为部署设置奇偶校验是在可用性和总可用存储之间取得平衡。较高的奇偶校验值以可用存储为代价,增加了对驱动器或节点故障的弹性,而较低的奇偶校验值则提供了最大的存储空间,但对驱动器/节点故障的容忍度较低。使用 MinIO 纠删码计算器来探索奇偶校验对您计划的集群部署的影响。

下表列出了在一个由 1 个节点和 16 个 1TB 驱动器组成的 MinIO 部署上,不同纠删码奇偶校验级别产生的结果。

16 驱动器 MinIO 集群上奇偶校验设置的结果

奇偶校验

总存储

存储比例

读取操作所需的最少驱动器数

写入操作所需的最少驱动器数

EC: 4 (默认)

12 Tebibytes

0.750

12

12

EC: 6

10 Tebibytes

0.625

10

10

EC: 8

8 Tebibytes

0.500

8

9

位衰减保护

位衰减(Bit rot)是指存储介质层面因随机变化而导致的静默数据损坏。对于数据驱动器,这通常是代表数据的电荷或磁向衰减的结果。这些原因可能从停电时的小电流尖峰到导致位翻转的随机宇宙射线。由此产生的“位衰减”可能在数据介质上引起细微的错误或损坏,而不会触发监控工具或硬件。

MinIO 对 HighwayHash 算法的优化实现确保了它能即时捕获和修复损坏的对象。通过在应用程序读取时计算哈希并在写入时验证,跨网络、到内存或驱动器,确保了端到端的完整性。该实现为速度而设计,在英特尔 CPU 的单核上可以达到超过 10 GB/秒的哈希速度。

English 中文