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