什么是Minio?
Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量、非结构化的数据。例如,图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小的,从几KB到5TB不等。
Minio架构
Minio可以支持多种后端存储格式,最简单的是直接通过文件系统保存对象,这些对象在登录机器后可以直接打开文件查看,但是这样会使用比较多的存储空间,Minio使用更多的是差错码,或者纠错码(erasure code)的方式存储。
通过erasure code、校验和checksum来保护数据免受硬件故障和无声数据损坏。即便丢失了一半数量(N/2)的硬盘,仍然可以恢复数据。下图是Minio存储的逻辑架构图
主要支持三种存储方式,分别是:
- 文件系统对象存储fsObject
- 差错码对象存储xlObject
- 第三方对象存储GatewayLayer。
其中,GatewayLayer只是一个存储接口,用于对接到Azure、AWS或者GCS的对象存储
如何和k8s结合?
MinIO是S3对象存储呀,不能直接当 Storage Class的。可以套个 juicefs 间接使用。
和raid的区别?
纠删码是一种恢复丢失和损坏数据的数学算法,Minio采用Reed-Solomon code将对象拆分成N/2的数据和N/2的奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块,还是奇偶校验块),都可以通过剩下的盘中的数据进行恢复。
看似和RAID很相似,但纠删码的工作原理和RAID或者复制并不同,例如,RAID6可以在损失两块盘的情况下不丢数据
Minio数据恢复的粒度
Minio纠删码在丢失一半的盘的情况下,仍可以保证数据安全。
Minio纠删码作用在对象级别,可以一次恢复一个对象
RAID作用在卷级别,数据恢复时间很长
Minio对每个对象单独编码,存储服务一经部署,通常情况下不需要更换硬盘或者修复。Minio纠删码的设计目标是为了提升性能,尽可能地使用硬件加速。
分布式对象存储