文档

擦除编码

MinIO 将擦除编码作为核心组件来提供数据冗余和可用性。此页面介绍了 MinIO 擦除编码。

请参阅 可用性和弹性部署架构,以获取有关 MinIO 如何在生产部署中使用擦除编码的更多信息。

擦除编码基础

注意

本节中的图表和内容提供了 MinIO 擦除编码操作的简化视图,并非旨在表示 MinIO 完整擦除编码实现的复杂性。

MinIO 将每个 服务器池 中的驱动器组合成一个或多个大小相同的**擦除集**。
Diagram of erasure set covering 4 nodes and 16 drives

以上示例部署包含 4 个节点,每个节点有 4 个驱动器。MinIO 初始化为一个由所有 4 个节点上的所有 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正好是擦除集大小的一半,则写入仲裁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

比特腐烂保护

比特腐烂是由存储介质级别的随机更改引起的静默数据损坏。对于数据驱动器,它通常是表示数据的电荷衰减或磁方向的结果。这些来源的范围可以从停电期间的小电流尖峰到导致比特翻转的随机宇宙射线。由此产生的“比特腐烂”会导致数据介质上的细微错误或损坏,而不会触发监控工具或硬件。

MinIO 对HighwayHash 算法的优化实现确保它能够动态捕获和修复损坏的对象。从应用程序到网络再到内存或驱动器,通过在读取时计算哈希并在写入时验证哈希,可以确保端到端的完整性。该实现旨在提高速度,并且可以在 Intel CPU 的单个内核上实现超过 10 GB/秒的哈希速度。