minio 存储级别

minio支持两种存储级别:Reduced Redundancy class 冗余缩减级别和 Standard class 标准级别。这两个级别可以在启动minio实例之前,通过系统的环境变量提前定义。此后,可以通过请求元数据字段x-amz-storage-class设定对象的存储级别。

存储级别的设置会直接影响存储空间或冗余级别。

比如在16块硬盘组成的minio实例中存储100MiB数据,如果设置了8个数据盘和8个校验盘,那么文件存储就会占用双倍的空间,比如100MiB文件就会占用200MiB的存储空间。而如果是10个数据盘和6个校验盘,100MiB则会占用大概160MiB的空间。如果是14个数据盘和2个校验盘,100MiB文件则只会占用114MiB的存储空间。

下表是16块硬盘的minio实例,校验盘和数据盘各种组合搭配时的存储利用率。

存储率 = 磁盘总数 / 数据盘总数

存储空间用量 = 文件尺寸 * 存储率

磁盘总数 (N) 数据盘 (D) 校验盘 (P) 存储率
16 8 8 2.00
16 9 7 1.79
16 10 6 1.60
16 11 5 1.45
16 12 4 1.34
16 13 3 1.23
16 14 2 1.14

Standard 标准级别

标准存储比冗余缩减级别存储有更多的校验信息,因此标准存储的校验盘应该:

  1. 如果没有设置缩减冗余存储,则校验盘数量应大于或等于2个;
  2. 如果设置了缩减冗余存储,则校验盘数量应大于缩减冗余存储设置的校验盘数量;

一个对象的校验块数量不能多于数据块的数量,因此校验盘的数量不能大于N/2(N为磁盘总数)。

纠删码集合 默认的校验 (EC:N)
5 或以下 EC:2
6-7 EC:3
8 及以上 EC:4

Reduced Redundancy 冗余缩减级别

冗余缩减级别的校验信息少于标准存储,因此冗余缩减级别的校验盘应该:

  1. 如果没有设置标准存储,则校验盘数量应小于 N/2;
  2. 如果设置了标准存储,则校验盘数量应小于标准存储;

As parity below 2 is not recommended, REDUCED_REDUNDANCY storage class is not supported for 4 disks erasure coding setup.

因为不推荐少于2个校验盘的设置,因此4个磁盘的纠删码配置不支持设置为REDUCED_REDUNDANCY级别。

REDUCED_REDUNDANCY 的默认校验盘数量为 2

存储级别设置

通过环境变量设置存储级别的格式为:

MINIO_STORAGE_CLASS_STANDARD=EC:parity MINIO_STORAGE_CLASS_RRS=EC:parity

比如设置将 MINIO_STORAGE_CLASS_RRS 设置为2个校验盘,将 MINIO_STORAGE_CLASS_STANDARD 设置为3个校验盘:

export MINIO_STORAGE_CLASS_STANDARD=EC:3
export MINIO_STORAGE_CLASS_RRS=EC:2

另外,还可以通过 mc admin config 的 get/set 命令设置存储级别。

总结

minio 默认会采用最高的冗余级别,比如,当有18块硬盘时,他会将硬盘分成2组,每组9个硬盘,一组存校验数据,一组存实际数据。