文档基于2025-10-10日社区最终版构建     
切换到英文版    进入演示系统    进入交流社区

MinIO Documentation

擦除编码

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

可用性与弹性部署架构有关 MinIO 在生产部署中如何使用纠删码的更多信息。

擦除编码基础

Note

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

MinIO 将每个服务器中的驱动器组织成服务器池整合为一个或多个Erasure Sets相同尺寸。
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任何类型的碎片读取一个对象。

The valueK这里构成了读取仲裁对于部署。 因此,擦除集必须至少有K擦除集中健康的驱动器支持读取操作。

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

此部署有一个离线节点,导致仅剩12个健康驱动器。 该对象写入时EC:4读取仲裁数为K=12因此,该对象保持读取仲裁,MinIO 可以将其重建以进行读取操作。

MinIO 无法重建已失去读取仲裁的对象。 此类对象可能需要通过其他方式恢复,例如复制重新同步.

MinIO 至少需要K擦除集驱动器到一个对象。

The valueK这里构成了写入仲裁对于部署。 因此,擦除集必须至少有K可用的在线驱动器以支持写入操作。

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

此部署有一个离线节点,导致仅剩12个健康驱动器。 客户端写入一个对象时EC:4奇偶校验设置,其中擦除集的写入仲裁数为K=12此擦除集保持写入仲裁,MinIO 可以使用它进行写入操作。

如果 ParityEC:M正好是擦除集大小的1/2,写入仲裁 is K+1

这可以防止脑裂类型的场景,例如网络问题恰好将纠删集中的一半驱动器与另一半隔离开来的情况。

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

This deployment has two nodes offline due to a transient network failure. A client writes an object withEC:8奇偶校验设置,其中擦除集的写入仲裁数为K=9此擦除集已失去写入仲裁,MinIO 无法将其用于写入操作。

TheK+1逻辑确保客户端不可能将同一对象写入两次——一次写入擦除集的每个"半区"。

对于一个维护中的对象读取仲裁MinIO 可以使用任何数据或奇偶校验分片来治愈损坏的分片。
Diagram of MinIO using parity shards to heal lost data shards on a node.

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

使用 MinIOErasure Coding Calculator探索计划拓扑结构可能的擦除集大小和分布。 在可能的情况下,使用偶数节点和每节点偶数驱动器以简化拓扑规划及驱动器/擦除集分布的概念化。

驱动器独占访问

MinIO需要 独家对象存储所提供的驱动器或卷的访问权限。 任何其他进程、软件、脚本或人员均不得执行任何直接对提供给 MinIO 的驱动器或卷,或 MinIO 置于其上的对象或文件执行操作。

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

Erasure Parity and Storage Efficiency

设置部署的奇偶校验是在可用性和总可用存储之间取得平衡。 较高的奇偶校验值会提高对驱动器或节点故障的恢复能力,但会牺牲可用存储空间;而较低的奇偶校验则提供最大存储容量,但对驱动器/节点故障的容忍度较低。 使用MinIOErasure Code Calculator探索奇偶校验对您计划的集群部署的影响。

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

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

Parity

总存储容量

存储比率

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

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

EC: 4(默认)

12 Tebibytes

0.750

12

12

EC: 6

10 太比字节

0.625

10

10

EC: 8

8 Tebibytes

0.500

8

9

Bit Rot Protection

比特腐烂静默数据损坏是由存储介质层面的随机变化引起的。 对于数据驱动器来说,这通常是表示数据的电荷或磁取向衰减的结果。 这些原因可能小到停电期间的微小电流尖峰,大到随机宇宙射线导致的比特翻转。 由此产生的"比特腐烂"可能在数据介质上引发细微错误或损坏,而不会触发监控工具或硬件的警报。

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