中文文档

纠删码(Erasure Coding)

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

查看 可用性和弹性 and 部署架构 了解有关 MinIO 如何在生产部署中使用纠删码的更多信息。

MinIO商业支持纠删码的规划和配置(纠删码)

你可以联系MinIO中国发起商业咨询, 在生产部署的规划、实施和活动阶段提供 24/7 直接工程咨询。 我们就商业客户应提出问题,让 MinIO 工程人员根据您的目标审查架构和部署策略,以确保工作负载的长期成功。 您可以联系MinIO中国的官方电话:4008-566-339。

纠删码(Erasure Coding)的基础知识

备注

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

MinIO 将每个服务器池中的驱动器分组为一个或多个相同大小的 纠删码集合
覆盖4个节点和16个驱动器的纠删码集合图

上述示例部署由 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 纠删码算法进行分片的对象图。

MinIO 使用里德-所罗门纠删码(Reed-Solomon Erasure Coding)实现并对对象进行分区以便在纠删集上进行分发。 上面的部署示例的纠删码集合大小为 16,奇偶校验为 EC:4

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

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

这里的值 K 构成部署的 读取仲裁 。 因此,纠删码集合中必须至少有 K 个健康驱动器才能支持读取操作。

4 节点 16 驱动器部署(其中一个节点离线)的示意图。

此部署有 1 个脱机节点,导致只剩下 12 个正常运行的驱动器。 该对象是用 EC:4 写入的,读取最小磁盘数为 K=12 。 因此,该对象维护读取仲裁,并且 MinIO 可以重建它以进行读取操作。

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

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

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

4 节点 16 驱动器部署图,其中一个节点处于脱机状态。

此部署有 1 个脱机节点,导致只剩下 12 个正常运行的驱动器。 客户端使用 EC:4 奇偶校验设置写入一个对象,其中纠删码集合的写入仲裁为 K=12 。 该纠删码集合维护写入仲裁,MinIO 可以使用它进行写入操作。

如果奇偶校验 EC:M 恰好是纠删码集合大小的 1/2,则 写入最小磁盘数K+1

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

纠删码集合示意图,其中奇偶校验  ``EC:M``  是集大小的 1/2

由于暂时性网络故障,此部署有两个节点脱机。 客户端使用 EC:8 奇偶校验设置写入一个对象,其中纠删码集合的写入仲裁为 K=9 。 该纠删码集合已丢失写入仲裁,MinIO 无法将其用于写入操作。

K+1 逻辑确保客户端不可能将同一个对象写入两次 - 一次写入纠删码集合的每个“一半”。

对于维护 读取仲裁 的对象,MinIO 可以使用任何数据或奇偶校验分片来 heal 损坏的分片。
MinIO 使用奇偶校验分片来修复节点上丢失的数据分片的示意图。

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

使用 MinIO Erasure Coding(纠删码)计算器 探索您规划的拓扑可能的纠删集大小和分布。 如果可能,请使用偶数个节点和每个节点的驱动器来简化拓扑规划和驱动器/纠删码集合分布的概念化。

Exclusive access to drives

MinIO 要求 专有 对提供给对象存储的驱动器或卷的访问。 其他任何进程、软件、脚本或人员都不得直接对提供给MinIO的驱动器或卷执行 任何 操作,也不得对MinIO放置在其上的对象或文件执行操作。

除非由MinIO工程部门指导,否则不要使用脚本或工具直接修改、删除或移动提供给MinIO的驱动器上的任何数据片段、校验片段或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。 这些操作很可能会导致广泛的数据损坏和丢失,超出了MinIO的修复能力。

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

设置部署的奇偶校验是可用性和总可用存储之间的平衡。 较高的奇偶校验值可提高对驱动器或节点故障的恢复能力,但会牺牲可用存储空间,而较低的奇偶校验值可提供最大的存储空间,但会降低对驱动器/节点故障的容忍度。 使用 MinIO 纠删码计算器 来探索奇偶校验对计划的集群部署的影响。

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

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

奇偶校验

总存储空间

存储比率

用于读取操作的最小驱动器

用于写入操作的最小驱动器

EC: 4 (Default)

12 TB

0.750

12

12

EC: 6

10 TB

0.625

10

10

EC: 8

8 TB

0.500

8

9

Bit Rot Protection

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

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

Join Slack 商业支持购买咨询