介绍
MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。
基本概念
- Object:存储到minio的基本对象,如文件,字节流,Anything。。。。
- Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。
- Drlve:存储数据的磁盘,在MinIO启动时,以参数的方式传入。MinIO中所有的对象数据都会存在Drive里。
- Set:即一组 Drive的集合,分布式部署根据集群规模自动划分一个或者多个Set,每个Set中的Drive 分布在不同位置。一个对象存储在一个Set上。
- 一个对象存储在一个Set上。
- 一个集群划分为多个Set。
- 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。
- 一个Set中的drive 尽可能分布在不同的节点上。
- 纠删码:Minio 使用纠删码机制来保证高可靠性。
- 使用highwayhash来处理数据损坏(Bit Rot Protectio)。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原。
- 纠删码是恢复丢失和算怀数据的数学算法,minio采用reed-solomincode将对象拆分成N/2数据和N/2奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据快、6个奇偶校验块,你可以丢失任意6块盘(不管其存放的是数据块还是奇偶校验块),你任可以从剩下的盘中的数据进行恢复。
- 纠删码模式,把数据分成 DATA BLOCk:数据块、 PARITY BLOCK:校验块。一个BLOCK 10M左右,如果一个文件小于10M,就以文件大小进行分块。如果一个文件大于10m,就以10M为一个文件单位进行分块。
应用场景
- 电商网站:海量商品图片
- 视频网站:海量视频文件
- 网盘:海量文件
优势
- 数据保护
- 分布式MInio采用纠删码来放反多个节点待机和位衰减 bit rot
- 分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
- 高可用
- 单机Minio服务存在单点故障,相反,如果是有一个N快硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
- 例如,一个16节点的Minio集群,每个节点16块块硬盘,计算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写入数据。
- 一致性
- Minio在分布式和单机模式下,所有读写炒作都严格遵守read-after-write 一致性模型
参考
[1]中文文档
[2]MinIO 介绍使用