Minio纠删码与存储级别

Minio纠删码与存储级别

纠删码(erasure code)概念

简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。举个最简单例子就是有两个数据(d1, d2),用一个校验和y(d1 + d2 = y)即可保证即使丢失其中一个,依然可以还原数据。如丢失 d1 ,则使用 y - d2 = d1 还原,同理,d2 丢失或者y丢失,均可通过计算得出。

EC 的具体应用实现中, RS(Reed-Solomen)是 EC 的一种更简单快捷的实现,可以通过矩阵运算,还原数据。具体的数学矩阵运算及证明,可以参考文章《Erasure-Code-擦除码-1-原理篇》及《EC纠删码原理》。

Minio采用Reed-Solomon code(纠删码中的一种)将对象拆分成m份数据和n份奇偶校验块。

Minio中的纠删码

首先需要了解如下基本概念:

  • Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。
  • Erasure Set:即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Erasure Set(每个Erasure Set包含4到16个Drive),每个 Erasure Set 中的 Drive 分布在不同位置。一个对象存储在一个 Erasure Set 上。

Minio采用Reed-Solomon code纠删码实现数据的冗余。对象通过Hash均匀分布在所在的Erasure Set中。在Minio中用格式(EC:N),其中N表示EC(m+n),m为数据块的数量,n为校验块parity的数量。Minio的读操作,需要的磁盘数量为:Erasure Set中m个磁盘,写操作需要m+1个磁盘。

对于小文件(小于2M),数据和元数据都同时保存在对应的xl.meta的文件中。对应大文件的写入,会创建相应的目录,该目录下是对应的part的数据文件和元数据文件。
在这里插入图片描述
在这里插入图片描述

由上两图可知:每个bucket对应一个同名本地目录,每个对象也对应一个同名的目录,下面存数据和元数据。

Minio中的存储级别

Minio当前支持两种存储级别:Reduced RedundancyStandard,通过对两种级别的设置来修改对象的Parity Drives (P)(奇偶校验块)和Data Drives (D)(数据块)的比例,让用户能够更好的控制磁盘使用率和容错性。

介绍

  1. STANDARD

STANDARD存储级别包含比REDUCED_REDUNDANCY存储级别更多的奇偶校验块,因此STANDARD存储级别的奇偶校验块需要满足如下条件:

  • 在未设置REDUCED_REDUNDANCY存储级别的情况下,STANDARD存储级别的奇偶校验块需要大于等于2;
  • 在设置了REDUCED_REDUNDANCY存储级别的情况下,STANDARD存储级别的奇偶校验块需要大于REDUCED_REDUNDANCY存储级别的奇偶校验块数量
  • 奇偶校验块的数量必须小于数据块,所以STANDARD存储级别的奇偶校验块不能大于N/2(N为Erasure Set中的磁盘数量)

STANDARD存储级别的奇偶校验块的默认值取决于Erasure Set中的磁盘数量:

Erasure Set SizeDefault Parity (EC:N)
5 or fewerEC:2
6-7EC:3
8 or moreEC:4

补充说明:在RELEASE.2021-01-30T00-20-58Z以前的版本中,STANDARD存储级别的奇偶校验块默认为N/2(N为Erasure Set中的磁盘数量)

  1. REDUCED_REDUNDANCY

REDUCED_REDUNDANCY存储级别包含比STANDARD存储级别更少的奇偶校验块,因此REDUCED_REDUNDANCY存储级别的奇偶校验块需要满足如下条件:

  • 在未设置STANDARD存储级别的情况下,REDUCED_REDUNDANCY存储级别的奇偶校验块需要小于N/2
  • 在设置了STANDARD存储级别的情况下,REDUCED_REDUNDANCY存储级别的奇偶校验块需要小于STANDARD存储级别的奇偶校验块数量
  • 奇偶校验块的数量必须小于数据块,且REDUCED_REDUNDANCY存储级别的奇偶校验块需要小于STANDARD存储级别的奇偶校验块数量,那么REDUCED_REDUNDANCY存储级别的奇偶校验块需要大于等于2,所以Erasure Set中的磁盘数量大于4的时候才支持REDUCED_REDUNDANCY存储级别。

REDUCED_REDUNDANCY存储级别的奇偶校验块默认值为:EC:2

使用

  1. 配置存储级别

有以下两种配置方式:

  • 环境变量
export MINIO_STORAGE_CLASS_STANDARD=EC:4
export MINIO_STORAGE_CLASS_RRS=EC:2

设置以上环境变量并重启服务

  • mc admin
mc admin config set myminio/ storage_class standard="EC:4"
mc admin config set myminio/ storage_class rrs="EC:2"

# 重启minio服务
mc admin service restart myminio/
  1. 对象存储级别选取

在对象上传时,通过设置x-amz-storage-class元数据为REDUCED_REDUNDANCYSTANDARD来为对象选择不同的存储级别,以下为python示例:

minioClient = Minio("localhost:9000", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", true)

metadata={'x-amz-storage-class': 'REDUCED_REDUNDANCY'}
# metadata={'x-amz-storage-class': 'STANDARD'}
minioClient.put_object(
    "mybucket", "myobject", BytesIO(b"hello"),
    metadata=metadata,
    length=5
)

备注:

  • 如果minio在启动前未自定义存储级别(storage class ),minio使用各模式存储级别的默认值进行对象储存。
  • 当上传对象时,如果没有设置x-amz-storage-class元数据,minio使用STANDARD模式的存储级别进行对象存储。

参考:

https://github.com/minio/minio/tree/master/docs/erasure/storage-class

https://github.com/minio/minio/tree/master/docs/config#storage-class

https://zhuanlan.zhihu.com/p/374939519

https://segmentfault.com/a/1190000022524583

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值