Skip to content

MinIO是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java、.Net、Python、Javacript、Golang等语言。

中文官档:

https://minio.org.cn

https://www.minio.org.cn/docs/minio/kubernetes/upstream/index.html,注意:中文官方更新不及时,会有坑,最终请以英文官网为准。

英文官档:https://min.io/

github:https://github.com/minio/minio

github releases: https://github.com/minio/minio/releases

开源许可

minio具有双重许可:

  • 完全免费的开源GNU AGPL v3;
  • 收费的商业许可。

相关概念

  • 对象存储(object storage),是一种数据结构,以对象为单位来管理数据,每个对象都包含数据本身和元数据。

    • Object:存储到minio的基本对象,如文件,音视频字节流,Anything....
    • 元数据:minio中的元数据主要包括对象的描述信息,如用户、存储桶、以及存储桶的索引等信息。
    • 对象存储系统通常是基于http/https协议的api进行数据的交互。
  • Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。

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

  • s3:Simple Storage Service,简单存储服务,这个概念是Amazon在2006年推出的,对象存储就是从那个时候诞生的。S3提供了一个简单Web服务接口,可用于随时在Web上的任何位置存储和检索任何数量的数据。

  • Set:即一组 Drive的集合,分布式部署根据集群规模自动划分一个或者多个Set,每个Set中的Drive 分布在不同位置。一个对象存储在一个Set上。

    • 一个对象存储在一个Set上。
    • 一个集群划分为多个Set。
    • 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。
    • 一个Set中的drive 尽可能分布在不同的节点上。
  • 纠删码:Minio 使用纠删码机制来保证高可靠性。

    • 纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份校验数据,并能通过n+m份中的任意n份原始数据,还原为原始数据。即如果有任意小于等于m份的校验数据失效,仍然能通过剩下的数据还原出来。

      Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。

      在同一集群内,MinIO 自己会自动生成若干纠删组(Set),用于分布存放桶数据。一个纠删组中的一定数量的磁盘发生的故障(故障磁盘的数量小于等于校验盘的数量),通过纠删码校验算法可以恢复出正确的数据

  • 关于minio中的账号信息:

    • MINIO_ACCESS_KEY:用户名,长度最小是5个字符,较新的minio版本中也叫做MINIO_ROOT_USER
    • MINIO_SECRET_KEY:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符,较新的minio版本中也叫做MINIO_ROOT_PASSWORD

应用场景

互联网非结构化数据的存储需求:

  • 电商网站:海量商品图片
  • 视频网站:海量视频文件
  • 网盘:海量文件

minio的优势

  • 数据保护
    • 分布式MInio采用纠删码来来防范多个节点宕机和位衰减big hot。
    • 分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
  • 高可用
    • 单机Minio服务存在单点故障,相反,如果是有一个N快硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
    • 例如,一个4节点的Minio集群,每个节点4块块硬盘,就算有2台服务器宕机,这个集群仍然是可读的,不过你需要3台服务器才能写入数据。
  • 一致性,Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write 一致性模型。
  • 兼容亚马逊S3云存储服务接口。
  • 限制:
    • 单租户(单个实例)存在最少 4 个盘最多 16 个盘的限制(受限于纠删码)。
    • 注意,只要遵守分布式 Minio 的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用 2 个节点,每个节点 4 块盘,也可以使用 4 个节点,每个节点两块盘,诸如此类。