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 Redundancy
和Standard
,通过对两种级别的设置来修改对象的Parity Drives (P)
(奇偶校验块)和Data Drives (D)
(数据块)的比例,让用户能够更好的控制磁盘使用率和容错性。
介绍
- 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
中的磁盘数量)
- 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
使用
- 配置存储级别
有以下两种配置方式:
- 环境变量
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/
- 对象存储级别选取
在对象上传时,通过设置x-amz-storage-class
元数据为REDUCED_REDUNDANCY
或STANDARD
来为对象选择不同的存储级别,以下为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纠删码与存储级别相关推荐
- MiniO纠删码快速入门
MiniO纠删码快速入门 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏. 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据. 什么是纠 ...
- CubeFS存储技术揭秘(2)— 纠删码单机存储引擎
00 背景 CubeFS自3.0.0版本开始提供低成本的纠删码存储(BlobStore),BlobStore是一个高可靠.高可用.低成本.支持EB规模的Blob存储.通过前文(CubeFS存储技术揭密 ...
- 第一节 Minio保护数据免受硬件故障和无声数据损坏的纠删码Erasure-Code
第一节 第一节 Minio保护数据免受硬件故障和无声数据损坏的纠删码Erasure-Code 什么是纠删码Erasure-Code? 什么是位衰减bit rot保护? 驱动器(盘)如何使用纠删码? E ...
- K8s使用Ceph纠删码池做持久化卷
K8s使用Ceph纠删码池做持久化卷 Ceph侧准备 Ceph纠删码相关 创建纠删码规则 创建纠删码池 创建复制集池 创建用户并授权 K8s消费ec池 验证 (可选)缓存方式 Kubernetes版本 ...
- minio存储之纠删码(Erasure Code)
纠删码的原理介绍可以参考: https://www.jianshu.com/p/4abf65ad03af 一般上我们如果要保证数据高可用,主流的有两种策略: 多副本 纠删码 副本(Replicatio ...
- minio分布式集群搭建完全教程(纠删码,数据恢复)
minio存储 单机测试 minio对象存储: 编译安装: minio 服务器安装: git clone https://gitee.com/mirrors/minio.git cd minio go ...
- Hadoop hdfs副本存储和纠删码(Erasure Coding)存储优缺点
The advantages and disadvantages of hadoop hdfs replicating storage and erasure coding storage. Hado ...
- CubeFS存储技术揭密(1) — 纠删码引擎系统设计
00 背景 CubeFS 3.0.0以前版本只提供多副本存储,随着数据规模持续增长,业务面临着更大的成本挑战,用户对更低成本的纠删码(ErasureCode, 下文简称EC)的需求愈加强烈:Cube ...
- vSAN 6.6在线研讨会-4月20日下午2:30 amp;amp; 小提示:如何理解FTT与纠删码的组合?
[编者按] 先撰写一篇小提示. 下图表示的存储策略,到底是以多副本方式,还是纠删码方式呢? 这个问题是上周拜访用户时,一位观察仔细的用户提出的.一般,很少用户会在第一次交流时能观察得这么细致. 基于存 ...
- 0460-HDFS纠删码的机架感知
Fayson的github: https://github.com/fayson/cdhproject 推荐关注微信公众号:"Hadoop实操",ID:gh_c4c535955d0 ...
最新文章
- 关于对J2EE几点误解和错误认识的澄清
- java无向图代码实例_Java 图示例 · JavaTutorialNetwork 中文系列教程 · 看云
- Linux学习:shell命令(文件和目录相关)
- C++ 学习之函数重载、基于const的重载
- 绑定方法与非绑定方法
- Linux指令:lspci显示PCI总线设备信息
- 在 Ruby 中执行 Shell 命令的 6 种方法
- excel中去掉换行符的快捷键
- 王者调整期选股技术之喇叭花开
- 李宏毅机器学习——无监督学习(四)
- 做一个有批判性思维的程序员
- 带通滤波器电路图设计(转)
- std::is_same的用法
- 面试系列——爱奇艺Andromeda 跨进程通信组件分析
- 微信支付可能改变的六大行业
- 公司法人代表变更需要多少钱?
- 【微软 Azure 认知服务】零基础搭建微软 Azure AI 认知服务实验分享
- hansontable编辑器
- Invalid packaging for parent POM x, must be “pom“ but is “jar“ @
- 2011 Asia Beijing Regional Online Contest-1004 hdu4043 FXTZ II
热门文章
- knockoutjs的某些坑总结
- PageHelper分页插件的简单使用
- Tcl 语言 ——列表篇
- 网易云音乐添加到html5,网易云音乐怎么把音乐存到云盘_网易云音乐将音乐存入添加到云盘方法介绍_3DM手游...
- (原创)安卓抓包方案分享
- 关于“商用超极本应用体验分享沙龙”的体验之旅——商用超极本的崛起之路、真机实测、优缺点分析与使用评价
- 加密算法Bcrypt
- 广西南宁机器人比赛_广西南宁中小学生机器人竞赛精彩纷呈
- 点播的时候出现 “S1-10921” 的错误
- 3Dmax-Vray动画渲染参数预设