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 标准级别
标准存储比冗余缩减级别存储有更多的校验信息,因此标准存储的校验盘应该:
- 如果没有设置缩减冗余存储,则校验盘数量应大于或等于2个;
- 如果设置了缩减冗余存储,则校验盘数量应大于缩减冗余存储设置的校验盘数量;
一个对象的校验块
数量不能多于数据块
的数量,因此校验盘的数量不能大于N/2
(N为磁盘总数)。
纠删码集合 | 默认的校验 (EC:N) |
---|---|
5 或以下 | EC:2 |
6-7 | EC:3 |
8 及以上 | EC:4 |
Reduced Redundancy 冗余缩减级别
冗余缩减级别的校验信息少于标准存储,因此冗余缩减级别的校验盘应该:
- 如果没有设置标准存储,则校验盘数量应小于 N/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个硬盘,一组存校验数据,一组存实际数据。