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