我们经常谈论到,对于想要在 AI/ML 领域占得先机的人来说,快速可靠地访问数据至关重要。虽然不同的 复制策略 允许您访问分布在多个节点或站点上的数据,但您还需要考虑驱动器级别的 数据完整性和弹性。
为什么呢?因为硬件故障会发生在不同级别。有些故障会导致整个站点瘫痪。还有一些故障会使集群中的一部分节点瘫痪。但也有更细粒度的硬盘驱动器位级故障,需要另一种复制本身无法提供的弹性。
这就是 擦除码 发挥作用的地方。它是一种可靠的方法,可以将数据分散到多个驱动器上,即使其中几个驱动器不可用,也可以将其取回。
MinIO 企业版对象存储利用 里德-索罗蒙 擦除码,以确保在多个磁盘部署中的数据冗余。直到最近,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 和 MINIO_STORAGE_CLASS_RRS,其值为 "EC:Parity" 格式。例如 MINIO_STORAGE_CLASS_STANDARD="EC:5"
- MinIO 配置文件 - 设置字段 storageclass,如下所示:"storageclass": { "standard": "EC:5", "rrs": "EC:3"}
然后在擦除码模式下启动 MinIO 服务器。存储类:使用 STANDARD 类的对象可以承受 [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 部署中正确设置存储类使用值来优化更高的冗余度或更好的存储使用率。
在您操作的同时,请帮助我们了解您的用例以及我们如何更好地帮助您!请通过 hello@min.io 联系我们,详细了解数据和奇偶校验如何在 MinIO 企业版对象存储中工作。