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 Size Default Parity (EC:N)
5 or fewer EC:2
6-7 EC:3
8 or more EC: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

Minio纠删码与存储级别相关推荐

  1. MiniO纠删码快速入门

    MiniO纠删码快速入门 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏. 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据. 什么是纠 ...

  2. CubeFS存储技术揭秘(2)— 纠删码单机存储引擎

    00 背景 CubeFS自3.0.0版本开始提供低成本的纠删码存储(BlobStore),BlobStore是一个高可靠.高可用.低成本.支持EB规模的Blob存储.通过前文(CubeFS存储技术揭密 ...

  3. 第一节 Minio保护数据免受硬件故障和无声数据损坏的纠删码Erasure-Code

    第一节 第一节 Minio保护数据免受硬件故障和无声数据损坏的纠删码Erasure-Code 什么是纠删码Erasure-Code? 什么是位衰减bit rot保护? 驱动器(盘)如何使用纠删码? E ...

  4. K8s使用Ceph纠删码池做持久化卷

    K8s使用Ceph纠删码池做持久化卷 Ceph侧准备 Ceph纠删码相关 创建纠删码规则 创建纠删码池 创建复制集池 创建用户并授权 K8s消费ec池 验证 (可选)缓存方式 Kubernetes版本 ...

  5. minio存储之纠删码(Erasure Code)

    纠删码的原理介绍可以参考: https://www.jianshu.com/p/4abf65ad03af 一般上我们如果要保证数据高可用,主流的有两种策略: 多副本 纠删码 副本(Replicatio ...

  6. minio分布式集群搭建完全教程(纠删码,数据恢复)

    minio存储 单机测试 minio对象存储: 编译安装: minio 服务器安装: git clone https://gitee.com/mirrors/minio.git cd minio go ...

  7. Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点

    The advantages and disadvantages of hadoop hdfs replicating storage and erasure coding storage. Hado ...

  8. CubeFS存储技术揭密(1) — 纠删码引擎系统设计

    00  背景 CubeFS 3.0.0以前版本只提供多副本存储,随着数据规模持续增长,业务面临着更大的成本挑战,用户对更低成本的纠删码(ErasureCode, 下文简称EC)的需求愈加强烈:Cube ...

  9. vSAN 6.6在线研讨会-4月20日下午2:30 amp;amp; 小提示:如何理解FTT与纠删码的组合?

    [编者按] 先撰写一篇小提示. 下图表示的存储策略,到底是以多副本方式,还是纠删码方式呢? 这个问题是上周拜访用户时,一位观察仔细的用户提出的.一般,很少用户会在第一次交流时能观察得这么细致. 基于存 ...

  10. 0460-HDFS纠删码的机架感知

    Fayson的github: https://github.com/fayson/cdhproject 推荐关注微信公众号:"Hadoop实操",ID:gh_c4c535955d0 ...

最新文章

  1. 关于对J2EE几点误解和错误认识的澄清
  2. java无向图代码实例_Java 图示例 · JavaTutorialNetwork 中文系列教程 · 看云
  3. Linux学习:shell命令(文件和目录相关)
  4. C++ 学习之函数重载、基于const的重载
  5. 绑定方法与非绑定方法
  6. Linux指令:lspci显示PCI总线设备信息
  7. 在 Ruby 中执行 Shell 命令的 6 种方法
  8. excel中去掉换行符的快捷键
  9. 王者调整期选股技术之喇叭花开
  10. 李宏毅机器学习——无监督学习(四)
  11. 做一个有批判性思维的程序员
  12. 带通滤波器电路图设计(转)
  13. std::is_same的用法
  14. 面试系列——爱奇艺Andromeda 跨进程通信组件分析
  15. 微信支付可能改变的六大行业
  16. 公司法人代表变更需要多少钱?
  17. 【微软 Azure 认知服务】零基础搭建微软 Azure AI 认知服务实验分享
  18. hansontable编辑器
  19. Invalid packaging for parent POM x, must be “pom“ but is “jar“ @
  20. 2011 Asia Beijing Regional Online Contest-1004 hdu4043 FXTZ II

热门文章

  1. knockoutjs的某些坑总结
  2. PageHelper分页插件的简单使用
  3. Tcl 语言 ——列表篇
  4. 网易云音乐添加到html5,网易云音乐怎么把音乐存到云盘_网易云音乐将音乐存入添加到云盘方法介绍_3DM手游...
  5. (原创)安卓抓包方案分享
  6. 关于“商用超极本应用体验分享沙龙”的体验之旅——商用超极本的崛起之路、真机实测、优缺点分析与使用评价
  7. 加密算法Bcrypt
  8. 广西南宁机器人比赛_广西南宁中小学生机器人竞赛精彩纷呈
  9. 点播的时候出现 “S1-10921” 的错误
  10. 3Dmax-Vray动画渲染参数预设