minio入门

1 介绍

Minio是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。

对象存储服务(Object Storage Service,OSS) 是一种海量、安全、低成本、高可靠的云存储服务,
适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API。 使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。

它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

2 基础概念

MINIO 有几个概念比较重要:

  • Object:存储到 Minio 的基本对象,如文件、字节流,Anything…

  • Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而言,就相当于一个存放文件的顶层文件夹。

  • Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。Minio 中所有的对象数据都会存储在 Drive 里。

  • Set:即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。(For example: {1…64} is divided into 4 sets each of size 16.)

一个对象存储在一个Set上
一个集群划分为多个Set
一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出
一个SET中的Drive尽可能分布在不同的节点上

3 存储架构

Minio针对不同应用场景也设置了对应的存储架构:

  • 单主机,单硬盘模式
    在这里插入图片描述
    该模式下,Minio只在一台服务器上搭建服务,且数据都存在单块磁盘上,该模式存在单点风险,主要用作开发、测试等使用。

启动的命令为:

minio server /home/shared
  • 单主机,多硬盘模式
    在这里插入图片描述

该模式下,Minio在一台服务器上搭建服务,但数据分散在多块(大于4块)磁盘上,提供了数据上的安全保障

docker启动命令如下:

minio server /mnt/data{1...64}
  • 多主机、多硬盘模式(分布式)
    在这里插入图片描述

该模式是Minio服务最常用的架构,通过共享一个access_key和secret_key,在多台(2-32)服务器上搭建服务,且数据分散在多块(大于4块,无上限)磁盘上,提供了较为强大的数据冗余机制(Reed-Solomon纠删码)。

export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=miniostorage
minio server http://node{1...32}.example.com/mnt/export{1...32}

4 存储机制

Minio 使用纠删码(erasure code)和校验和(checksum)。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。

4.1 校验和

保护数据免受硬件故障和无声数据损坏

4.2 纠删码

纠删码是一种恢复丢失和损坏数据的数学算法,是一种编码技术,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。

目前,纠删码技术在分布式存储系统中的应用主要有如下三类:

  • 阵列纠删码(Array Code: RAID5、RAID6等)
  • 里德-所罗门类纠删码 (RS,Reed-Solomon)
  • 低密度奇偶校验纠删码(LDPC,LowDensity Parity Check Code)

4.3 位衰减保护(Bit Rot Protection)

Bit Rot 位衰减又被称为数据腐化Data Rot、无声数据损坏Silent Data Corruption。 位衰减可以理解为无形中的数据丢失——或者称为“Bit rot”,是指物理存储介质的衰减所带来的隐患将凸显出来。

位衰减是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志
针对这一问题,最新的Minio采用了HighwayHash算法计算校验和来防范位衰减,根据测试结果,其可以实现10GB/s的处理速度。

大致做法是:

MinIO把之前的编码块进行 HighwayHash 编码,最后要校验这个编码,以确保每个编码是正确的。

MinIO提供了一个管理工具,可以对所有编码块进行校验,如果发现编码块有问题,再去修复它。目前,Minio提供了全量、bucket、文件夹、文件等各个粒度的修复操作:

# 递归修复
mc admin heal -r myminio

# 指定桶修复
mc admin heal -r myminio/dev

4.4 minio编码数据恢复原理

Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复。

纠删码跟传统多副本存储方案相比,他只冗余存了一份,但可靠性更高。

纠删码的工作原理和RAID或者副本不同,像RAID6只能在损失两块盘,或者以下的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。

RS编码以word为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的word,然后对word进行编解码。数据块的编码原理与word编码原理相同,后文中以word为例说明,变量Di, Ci将代表一个word。

把输入数据视为向量D=(D1,D2,…, Dn), 编码后数据视为向量(D1, D2,…, Dn, C1, C2,…, Cm),RS编码可视为如下(图1)所示矩阵运算。
图1最左边是编码矩阵(或称为生成矩阵、分布矩阵,Distribution Matrix),编码矩阵需要满足任意n*n子矩阵可逆。为方便数据存储,编码矩阵上部是单位阵(n行n列),下部是m行n列矩阵。下部矩阵可以选择范德蒙德矩阵或柯西矩阵。
在这里插入图片描述

RS最多能容忍m个数据块被删除。 数据恢复的过程如下:
(1)假设D1、D4、C2丢失,从编码矩阵中删掉丢失的数据块/编码块对应的行。(图2、3)
(2)由于B’ 是可逆的,记B’的逆矩阵为 (B’^-1),则B’ * (B’^-1) = I 单位矩阵。两边左乘B’ 逆矩阵。 (图4、5)
(3)得到如下原始数据D的计算公式 。
在这里插入图片描述

4.5 minio如何写入对象

minio是通过数据编码,将原来的数据编码成N份,N就是一个Set上面Drive的数量。对象被编码成N份之后,把每一份,写到对应的 Drive 上面,这就是把一个对象存储在整个 Set 上一个集群包含多个 Set,每个对象最终存储在哪个 Set 上是根据对象的名称进行哈希,然后影射到唯一的 Set 上面,这个方式从理论上保证数据可以均匀的分布到所有的 Set 上。

在同一个set中,数据分布的也非常均匀,一个Set上包含多少个Drive是由系统自动根据集群规模算出来的,当然,也可以自己去配置。一个Set 的 Drive 系统会考虑尽可能把它放在多的节点上面,保证它的可靠性。

5 参考文档

minio官网
minio存储机制
高性能对象存储MinIO介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值