为什么会这样?这是因为硬件故障发生在不同的级别。有一些中断会导致整个站点瘫痪。然后,会出现中断,导致集群中的一部分节点瘫痪。但是,在更精细的硬盘驱动器位级别也存在故障,这些故障需要复制本身无法提供的另一种类型的弹性。 我们经常谈论,如果您想在 AI/ML 游戏中占据上风,那么良好、快速和可靠的数据访问是多么重要。虽然不同的复制策略允许您访问要分布在多个节点或站点上的数据,但您还需要考虑驱动器级别的数据完整性和复原能力。这就是擦除编码发挥作用的地方。这是一种可靠的方法,可以在多个驱动器之间对数据进行分片并将其取回,即使其中一些驱动器不可用也是如此。
MinIO Enterprise Object Storage 利用 Reed Solomon 纠删码来确保多个磁盘部署中的数据冗余。直到最近,在 MinIO 的纠删编码中,用于数据和奇偶校验的驱动器数量都固定为 N/2(N 是 MinIO 服务器正在使用的驱动器总数)。这是纠删码必须提供的最高冗余。
您可能会丢失一半的驱动器,但仍然可以保证不会发生数据丢失。
这仍然是我们推荐的配置。
但是,高冗余也意味着更高的存储使用率。在某些情况下,如此高的奇偶校验计数和存储使用量可能是不可取的,例如:
-
用户可能已部署具有故障安全性的专用存储硬件。因此,他们预计不会频繁失败。
-
与存储本身相比,存储的数据不太重要,价值也较小。
-
MinIO 存储中的数据正在备份到其他站点。
为了解决此类用例,我们在 MinIO 企业对象存储中支持 Kubernetes 存储类。存储类提供两种模式:标准模式和低冗余模式,每种模式都具有可配置的数据和奇偶校验驱动器。在我们了解这些类的含义以及如何使用它们之前,让我解释一下数据和奇偶校验磁盘的各种组合以及相应的驱动器空间使用情况。
驱动器空间利用率
为了了解数据和奇偶校验驱动器的各种组合如何影响存储使用,让我们以存储在 16 个驱动器 MinIO 部署上的 100 MiB 文件为例。
如果您使用 8 个数据驱动器和 8 个奇偶校验驱动器,则文件空间使用量将恰好是两倍,即 100 MiB 文件将占用 200 MiB 空间。但是,如果您使用 10 个数据和 6 个奇偶校验驱动器,则相同的 100 MiB 文件将需要大约 160 MiB。如果您使用 14 个数据驱动器和 2 个奇偶校验驱动器,则 100 MiB 文件仅消耗大约 114 MiB。
但是,需要注意的是,随着奇偶校验驱动器数量的减少,数据的冗余程度会降低。例如,使用 14 个数据驱动器和 2 个奇偶校验驱动器,一个对象只能承受 2 个驱动器损失,如果丢失了第 3 个驱动器,则将丢失数据。因此,除非用于非关键数据,否则 MinIO 不建议使用此配置。
下表总结了数据/奇偶校验驱动器和相应的存储空间。字段的存储使用率只是文件在擦除编码后使用的驱动器空间除以实际文件大小。
您可以使用公式计算近似的存储使用率 — 驱动器总数 (N) / 数据驱动器 (D)。
下图显示了每个部署具有 4 个节点、4 个驱动器的数据和奇偶校验分片的样本分布,其中启用了两种类型的存储类。
16 驱动器分布式部署,具有两种存储类别
MinIO 存储类入门
目前支持两种存储类:标准和低冗余。您可以使用以下方法设置这些类
-
环境变量 — 设置环境变量MINIO_STORAGE_CLASS_STANDARD,并使用格式为“EC:Parity”的值进行MINIO_STORAGE_CLASS_RRS。例如 MINIO_STORAGE_CLASS_STANDARD=“EC:5”
-
MinIO 配置文件 — 设置字段 storageclass 如下“storageclass”: { “standard”: “EC:5”, “rrs”: “EC:3”}
然后以纠删码模式启动 MinIO 服务器。存储类别:具有标准类别的对象可以承受 [5] 个驱动器故障。具有REDUCED_REDUNDANCY类的对象可以承受 [3] 个驱动器故障。
有关详细信息,请参阅此处的存储类文档:https://github.com/minio/minio/tree/master/docs/erasure/storage-class
标准存储类
标准存储类是部署的默认存储类。设置后,默认情况下,所有 PutObject 请求都将遵循在标准存储类下设置的数据/奇偶校验配置。
例如,在 10 个驱动器的 MinIO 部署中,标准存储类设置为 6 个数据和 4 个奇偶校验驱动器,发送到此 MinIO 部署的所有 PutObject 请求都将以 6 个数据和 4 个奇偶校验配置存储对象。
以下是标准存储类的其他一些有趣的方面
-
默认情况下,标准存储类数据和奇偶校验驱动器设置为 N/2(并且不能设置为高于此值)。
-
您可以选择将对象元数据设置为 X-Amz-Storage-Class:STANDARD,以便为相应的对象启用 STANDARD 存储类。
-
如果将类设置为 STANDARD,则 MinIO 服务器不会在元数据字段中返回存储类。这符合 AWS S3 PutObject 行为。
减少冗余的存储类
减少冗余的存储类可以应用于性质不太重要的对象,需要较少的复制。要应用此类,请在 PutObject(或多部分)请求中将对象元数据设置为 X-Amz-Storage-Class:REDUCED_REDUNDANCY。这表明 MinIO 服务器存储相应的对象,其中包含由减少的冗余类定义的数据和奇偶校验。
以下是减少冗余存储类的一些有趣的方面
-
默认情况下,减少冗余的存储类奇偶校验驱动器设置为 2(并且不能设置为低于此值)。
-
您需要在对象元数据中设置 X-Amz-Storage-Class:REDUCED_REDUNDANCY,以便服务器端减少冗余。
-
如果将该类设置为减少冗余,则 MinIO 服务器将在元数据字段中返回一个存储类。
借助存储类支持,MinIO 服务器现在提供对磁盘使用和冗余的细粒度控制。现在,您可以做出最适合您的用例的权衡,即您可以通过在 MinIO 部署中正确设置存储类使用值来优化以获得更好的冗余或更好的存储使用率。