minio高可用架构与实操(图解+秒懂+史上最全)

minio⾼可⽤架构与实操(图解+秒懂+史上最全)
⽂章很长,建议收藏起来,慢慢读! 奉上以下珍贵的学习资源:
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送经典图书: ⾯试必备 + ⼤⼚必备 +涨薪必备加尼恩免费领
免费赠送资源宝库: Java 必备百度⽹盘资源⼤合集价值>10000元
推荐:⼊⼤⼚、做架构、⼤⼒提升Java 内功的精彩博⽂
⼊⼤⼚、做架构、⼤⼒提升Java 内功必备的精彩博⽂2021 秋招涨薪1W + 必备的精彩博⽂1:2:
3: (⾯试必备)4: (史上最全)
5:6:
7:8:
9:10:
11:12:
13:14:
Java ⾯试题 30个专题 , 史上最全 , ⾯试必刷阿⾥、京东、美团... 随意挑、横着⾛
1:
17、
29、30、
9.更多专题,请参见【】
SpringCloud 精彩博⽂
更多专题,请参见【】
背景:
下⼀个视频版本,从架构师视⾓,尼恩为⼤家打造⾼可⽤、⾼并发中间件的原理与实操。
⽬标:通过视频和博客的⽅式,为各位潜⼒架构师,彻底介绍清楚架构师必须掌握的⾼可⽤、⾼并发环境,包括但不限于:
⾼可⽤、⾼并发nginx架构的原理与实操
⾼可⽤、⾼并发mysql架构的原理与实操
⾼可⽤、⾼并发nacos架构的原理与实操
⾼可⽤、⾼并发rocketmq架构的原理与实操
⾼可⽤、⾼并发es架构的原理与实操
⾼可⽤、⾼并发minio架构的原理与实操
why ⾼可⽤、⾼并发中间件的原理与实操:
实际的开发过程中,很多⼩伙伴聚焦crud开发,环境出了问题,都不能启动。
作为架构师,或者未来想⾛向⾼端开发,或者做架构,必须掌握⾼可⽤、⾼并发中间件的原理,掌握其实操。
本系列博客的具体内容,请参见
分布式⽂件系统应⽤场景
互联⽹下海量的⾮结构化存储的需求背景下,⽐如:
电商⽹站,存储海量的商品图⽚
视频⽹站,海量的视频⽂件
⽹盘,海量的⽂件
社交⽹站等等
在这样的背景下,传统的FastDFS部署太过于繁琐,动不动就是来个nginx,然后配置⼀堆参数和设置,尤其是做分布式的时候,那维护成本⼀下就上来了,从维护和部署的⾓
度,FastDFS不是⼀个好的选择,⽽从迭代的⾓度,FastDFS早就不维护了,有很多需求是⽆法
⽀持到的,那么就需要你⾃⼰思考写源码打包了。
同理HDFS部署也不简单,⽽且Hadoop适合超⼤⽂件的存储,并且⽂件都需要分⽚,应⽤场景更多是计算处理,实时数据分析,并且其实HDFS⽐较吃硬件设备,因为偏于计算,所以对CPU的要求⽐较⾼,对于中⼩企业的业务量并没有这么⼤,所以应⽤场景这块也⽐较
难接触到,但是HDFS的功能还是⼗分强⼤的!!还是根据业务进⾏选型。
存储⽅案的选型
以下选型⽅案,来⾃于探探
这是探探app的⼏个功能,它的基础功能⾮常简单左划右划,左划是不喜欢,右划是喜欢,当两个⼈相互喜欢就配对成功了,配对成功之后就开始相互聊天。
你所看到的⼀些图⽚、视频还有在聊天中产⽣的语⾳,这些元素在对象存储的范畴⾥⾯,就是以对象保存下来。
随着⽤户量的增长,探探所要存储的对象越来越多。
污染物扩散模型探探存储的⽂件类型vaio sz
这是探探2019年的⽂件存储数据.
数据的体量为:
在不同类型对象所占的空间中,显⽽易见图⽚是存储的⼀个⼤头,超过了 1PB,它定期清理所以⼤⼩基本上保持了稳定的状态。
访问的吞吐量数据为:
写⼊的 QPS ⼤概是 1 千左右,读取是 5 千左右,压⼒不是很⼤。
⽅案选型
于是,探探团队就开始调研当前的⼀些开源⽅案,这些存储⽅案⾥⾯可以分为两种:
⼀种是可以⾃定对象名称的;
另外⼀种是系统⾃动⽣成对象名称。
探探的对象名是⾃⼰⽣成的,⾥⾯包含了业务逻辑。
像 FS 就是国内⼤佬开源的⼀个分⽀存储,但是因为不能⾃定义⽂件名所以不合适,左划掉。
还有像领英的 Ambry、MogileFS 其实都不能⾃定对象名的,所以是不合适的。
左上⾓ LeoFS 对探探来说不是很可控,所以不合适。
TFS 是淘宝开源的,但是⽬前已经很少有⼈维护它并且也不是很活跃,所以当时就没有考虑。
ceph 是⼀个⽐较强⼤的分布式存储,但是它整个系统⾮常复杂需要⼤量的⼈⼒进⾏维护,和探探的产品不是很符合,所以暂时不考虑。
GlusterFS 为本⾝是⼀个⾮常成熟的对象存储的⽅案。2011年左右被收购了,他们原版⼈马⼜做了另外⼀个存储系统MINIO,仙鹤就是他们的 logo。
MINIO 的⽂档⾮常详细、具体,再加上他们之前在存储⽅⾯有⼗⼏年的经验,所以就这样打动了探探
团队,作为选型的标的。
MinIO 介绍
Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。
筹备好2022年冬奥会体现了我国哪项战略措施官⽹地址:
何为对象存储?
对象存储服务(Object Storage Service,OSS)是⼀种海量、安全、低成本、⾼可靠的云存储服务,适合存放任意类型的⽂件。容量和处理能⼒弹性扩展,多种存储类型供选择,全⾯优化存储成本。
MinIO 是⼀个基于Apache License v2.0开源协议的对象存储服务。
它兼容亚马逊S3云存储服务接⼝,⾮常适合于存储⼤容量⾮结构化的数据,例如图⽚、视频、⽇志⽂件、备份数据和容器/虚拟机镜像等,⽽⼀个对象⽂件可以是任意⼤⼩,从⼏kb到最⼤5T不等。
MinIO是⼀个⾮常轻量的服务,可以很简单的和其他应⽤的结合,类似 NodeJS, Redis 或者 MySQL。
对于中⼩型企业,如果不选择存储上云,那么 Minio 是个不错的选择,⿇雀虽⼩,五脏俱全。
当然 Minio 除了直接作为对象存储使⽤,还可以作为云上对象存储服务的⽹关层,⽆缝对接到 Amazon S3、MicroSoft Azure。
MINIO 基础概念
MINIO 有⼏个概念⽐较重要:
Object:存储到 Minio 的基本对象,如⽂件、字节流,
安云霁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尽可能分布在不同的节点上
Set /Drive 的关系
Set /Drive 这两个概念是 MINIO ⾥⾯最重要的两个概念,⼀个对象最终是存储在 Set 上⾯的。
我们来看下边 MINIO 集存储⽰意图,每⼀⾏是⼀个节点机器,这有 32 个节点,每个节点⾥有⼀个⼩⽅块我们称之 Drive,Drive 可以简单地理解为⼀个硬盘。
图中,⼀个节点有 32 个 Drive,相当于 32 块硬盘。
Set 是另外⼀个概念,Set 是⼀组 Drive 的集合,图中,所有蓝⾊、橙⾊背景的Drive(硬盘)的就组成了⼀个 Set.
MIINO如何写⼊对象?
MINIO 是通过数据编码,将原来的数据编码成 N 份,N 就是⼀个 Set 上⾯ Drive 的数量,后⾯多次提到的 N 都是指这个意思。
上图中,⼀个 Set 上⾯ Drive 的数量,是3.
对象被编码成N份之后,把每⼀份,写到对应的 Drive 上⾯,这就是把⼀个对象存储在整个 Set 上。
⼀个集包含多个 Set,每个对象最终存储在哪个 Set 上是根据对象的名称进⾏哈希,然后影射到唯⼀的 Set 上⾯,这个⽅式从理论上保证数据可以均匀的分布到所有的 Set 上。
根据的观测,数据分布的也⾮常均匀,⼀个 Set 上包含多少个 Drive 是由系统⾃动根据集规模算出来的,当然,也可以⾃⼰去配置。
⼀个 Set 的 Drive 系统会考虑尽可能把它放在多的节点上⾯,保证它的可靠性。
Minio存储架构
Minio针对不同应⽤场景也设置了对应的存储架构:
单主机,单硬盘模式
该模式下,Minio只在⼀台服务器上搭建服务,且数据都存在单块磁盘上,该模式存在单点风险,主要⽤作开发、测试等使⽤
启动的命令为:
minio --config-dir ~/tenant1 server --address :9001 /disk1/data/tenant1
单主机,多硬盘模式
该模式下,Minio在⼀台服务器上搭建服务,但数据分散在多块(⼤于4块)磁盘上,提供了数据上的安全保障
minio --config-dir ~/tenant1 server --address :9001 /disk1/data/tenant1 /disk2/data/tenant1 /disk3/dat
a/tenant1 /disk4/data/enant1
多主机、多硬盘模式(分布式)
该模式是Minio服务最常⽤的架构,通过共享⼀个access_key和secret_key,在多台(2-32)服务器上搭建服务,且数据分散在多块(⼤于4块,⽆上限)磁盘上,提供了较为强⼤的数据冗余机制(Reed-Solomon纠删码)。
export MINIO_ACCESS_KEY=<TENANT1_ACCESS_KEY>
export MINIO_SECRET_KEY=<TENANT1_SECRET_KEY>
minio --config-dir ~/tenant1 server --address :9001 192.168.10.11/data/tenant1 192.168.10.12/data/tenant1 192.168.10.13/data/tenant1 192.168.10.14/data/tenant1分布式Minio有什么好处?
在⼤数据领域,通常的设计理念都是⽆中⼼和分布式。Minio分布式模式可以帮助你搭建⼀个⾼可⽤的对象存储服务,你可以使⽤这些存储设备,⽽不⽤考虑其真实物理位置。
数据保护
分布式Minio采⽤ 来防范多个节点宕机和。
分布式Minio⾄少需要4个硬盘,使⽤分布式Minio⾃动引⼊了纠删码功能。
⾼可⽤
单机Minio服务存在单点故障,相反,如果是⼀个有N块硬盘的分布式Minio, 只要有N/2硬盘在线,你的数据就是安全的。
不过你需要⾄少有N/2+1个硬盘来创建新的对象。
例如,⼀个16节点的Minio集,每个节点16块硬盘,就算8台服務器宕机,这个集仍然是可读的,不过你需要9台服務器才能写数据。
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点⼏块硬盘。
⽐如,你可以使⽤2个节点,每个节点4块硬盘,也可以使⽤4个节点,每个节点两块硬盘,诸如此类。
⼀致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write⼀致性模型。
MinIO的数据⾼可靠
Minio使⽤了Erasure Code 纠删码和 Bit Rot Protection 数据腐化保护这两个特性,所以MinIO的数据可靠性做的⾼。
Erasure Code纠删码
纠删码(Erasure Code)简称EC,是⼀种数据保护⽅法,它将数据分割成⽚段,把冗余数据块扩展、编码,并将其存储在不同的位置,⽐如磁盘、存储节点或者其它地理位置。
从数据函数⾓度来说,纠删码提供的保护可以⽤下⾯这个简单的公式来表⽰:n = k + m。变量“k”代表原始数据或符号的值。变量“m”代表故障后添加的提供保护的额外或冗余符号的值。变量“n”代表纠删码过程后创建的符号的总值。
举个例⼦,假设n=16,代表有16块磁盘,另外,有10份原始⽂件⼀模⼀样,称为k,16 = 10 +m,这个m就是可以恢复的校验块个数,所以m是6,任意6个不可⽤,原始⽂件都可以恢复,极端情况,10
个原始⽂件坏掉6个,靠4个原始的加上6个校验块,可以把坏掉的6个原始⽂件恢复,这个⽤到数学⾏列式矩阵知识,不做展开。
协作学习MinIO的编码⽅式,将⼀个对象编码成若⼲个数据块和校验块,我们简称为Erasure Code码,这个是编码的类型,这种编码的类型,还需要算法来实现,minio 采⽤的是 Reed-Solomon算法。
MinIO使⽤Reed-Solomon算法,该算法把对象编码成若⼲个数据块和校验块。
Reed-Solomon算法的特点:
低冗余
⾼可靠
为了表述⽅便,把数据块和校验块统称为编码块,之后我们可以通过编码块的⼀部分就能还原出整个对象。
Reed-Solomon code
Reed-Solomon 是纠删码的实现算法的⼀种,当然,也是⼀种恢复丢失和损坏数据的数学算法,
Minio默认采⽤Reed-Solomon code将数据拆分成N/2个数据块和N/2个奇偶校验块。
这就意味着如果是16块盘,⼀个对象会被分成8个数据块、8个奇偶校验块,你可以丢失任意8块盘(不管其是存放的数据块还是校验块),你仍可以从剩下的盘中的数据进⾏恢复。
如上图,如我们所知,⼀个对象存储在⼀个Set上⾯,这个Set包含16个Drive,其中灰⾊的⼀半是数据库,橙⾊的⼀半是校验块,这种⽅式最多能忍受⼀半的编码丢失或损坏。所有编码块的⼤⼩是原对象的2倍,跟传统多副本存储⽅案相⽐,他只冗余存了⼀份,但可靠性更⾼。
纠删码的⼯作原理和RAID或者副本不同,像RAID6只能在损失两块盘,或者以下的情况下不丢数据,⽽Minio纠删码可以在丢失⼀半的盘的情况下,仍可以保证数据安全。
⽽且Minio纠删码是作⽤在对象级别,可以⼀次恢复⼀个对象,⽽RAID是作⽤在卷级别,数据恢复时间很长。
Minio对每个对象单独编码,存储服务⼀经部署,通常情况下是不需要更换硬盘或者修复。
此外,针对不同应⽤所需的数据安全级别不同,Minio还提供了存储级别(Storage Class)的配置,调整数据块和校验块的⽐例,做到对空间的最佳使⽤。
⽐如在将⽐例调整为14:2后,存储100M的数据占⽤的空间仅为114M。
Bit Rot Protection:
接下来讲Bit Rot Protection,直译就是腐烂。
它只是物理设备上的⼀些⽂件细微的损坏,还没有被操作系统所硬件所察觉,但是他已经损坏了。
Bit Rot 位衰减⼜被称为数据腐化Data Rot、⽆声数据损坏Silent Data Corruption,
位衰减可以理解为⽆形中的数据丢失——或者称为“Bit rot”, 是指物理存储介质的衰减所带来的隐患将凸显出来。
位衰减是⽬前硬盘数据的⼀种严重数据丢失问题。
硬盘上的数据可能会神不知⿁不觉就损坏了,也没有什么错误⽇志。
⼀项对150万块硬盘的研究表明,每90块硬盘就有1块有这种“软错误”,这个错误不但会导致数据丢失,还会导致RAID错误。
针对这⼀问题,最新的Minio采⽤了HighwayHash算法计算校验和来防范位衰减,根据测试结果,其可以实现10GB/s的处理速度。
⼤致的做法是:
信息技术的负面影响
MinIO把之前的编码块进⾏ HighwayHash 编码,最后要校验这个编码,以确保每个编码是正确的。
⽂件的修复
另外,MinIO提供了⼀个管理⼯具,可以对所有编码块进⾏校验,如果发现编码块有问题,再去修复它。
得益于Reed-Solomon纠删码,Minio可以更加灵活的对⽂件进⾏修复。
⽬前,Minio提供了全量、bucket、⽂件夹、⽂件等各个粒度的修复操作:
递归修复
$ mc admin heal -r myminio
指定桶修复
$ mc admin heal -r myminio/dev
下⾯是⼏个例⼦:
相⽐⼀般的RAID⽅式,Minio可以在⾮常⼩的粒度下对⽂件进⾏修复操作,灵活性有了很⼤提⾼。
修复后,可以JSON格式列出指定路径(⽂件、⼤⼩)
$ mc ls -r --json myminio/dev
{
"status": "success",

本文发布于:2024-09-23 01:22:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/37946.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   对象   编码   服务
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议