官方文档:https://docs.min.io/docs/
minio支持多种server启动模式
1.分布式文件系统应用:
1.1、Minlo 介绍:
Minlo 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb到最大5T不等。
MinIo是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
官网: https://min.io/ http://www.minio.org.cn/
对象存储服务 (Obiect Storage Servie,OSS) 是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。
对于中小型企业,如果不选择存诸上云,那么 Minio 是个不错的选择,麻雀虽小,五脏俱全。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。
在中国: 阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinlO产品。
Minio优点
部署简单: 一个single二进制文件即是一切,还可支持各种平台。
minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;
兼容Amazon S3接口,充分考虑开发人员的需求和体验;
图灵学院
低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用
磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure
Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。
读写性能优异
1.2 MinIO的基础概念
**Object:**存储到 Minio 的基本对象,如文件、字节流,Anything…
**Bucket:**用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的(起到隔离作用)。对于客户端而言,就相当于一个存放文件的顶层文件夹。
**Drive:**即存储数据的磁盘,(文件上传后minIo会在自身所在的服务器的磁盘上面创建相应名称的Bucket‘目录’,并将文件存放在该相应的目录下面)在 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尽可能分布在不同的节点上
1.3 纠删码EC(Erasure Code)
MinIO 使用纠删码机制来保证高可靠性,使用 highwayhash 来处理数据损坏(Bit Rot Protection )。关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进行还原,它可以将n份原始数据,增加m份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失效,仍然能通过剩下的数据还原出来。
纠删码EC:模式生效最少需要四块盘。纠删码模式:
比方说有六块盘,其中4块盘存放数据,其中另外两块盘存放经过纠删码机制的一个算法计算形成的一个文件。如果丢失了一份文件:可能是数据文件,也可以是经过纠删码之后的文件都可以通过其他纠删码还原。而判断文件是否损坏:可以对上的文件进行哈希计算得到一个Hash码,而Hash码是唯一的,如果下次再对这个文件进行哈希计算,得到的Hash码不同,则可以证明该文件损坏。
1.4 存储形式
文件对象上传到 MinIO ,会在对应的数据存储磁盘中,以 Bucket 名称为目录,文件名称为下一级目
录,文件名下是 part.1 和 xl.meta(老版本,最新版本如下图),前者是编码数据块及检验块,后者是元数
据文件。
1.5、存储方案
minio支持多种server启动模式:
2.1 单机部署
minio server的standalone模式,即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境、测
试环境的验证和学习使用。在standalone模式下,还可以分为non-erasure code mode和erasure
code mode。
non-erasure code mode
在此启动模式下,对于每一份对象数据,minio直接在data下面存储这份数据,不会建立副本,也不会
启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏
就表示数据丢失。
erasure code mode
此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server会自动
启用erasure code mode。erasure code对磁盘的个数是有要求的,如不满足要求,实例启动将失
败。 erasure code启用后,要求传给minio server的endpoint(standalone模式下,即本地磁盘上的目
录)至少为4个。
2.2、minio纠删码模式
Minio使用纠删码erasure code 和校验和checksum 来保护数据免受硬件故障和无声数据损坏。 即便 您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。
使用Minio Docker镜像,在8块盘中启动Minio服务:
docker run -d -p 9000:9000 -p 50000:50000 --name minio \ -v /mnt/data1:/data1 \ -v /mnt/data2:/data2 \ -v /mnt/data3:/data3 \ -v /mnt/data4:/data4 \ -v /mnt/data5:/data5 \ -v /mnt/data6:/data6 \ -v /mnt/data7:/data7 \ -v /mnt/data8:/data8 \ minio/minio server /data{1...8} --console-address ":50000"
3 分布式集群部署
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
分布式存储可靠性常用方法
分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现 的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性 的方法主要有两类,一类是冗余法,一类是校验法。
冗余
冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢 复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是 采用此种方式实现,如 Hadoop 的文件系统(3个副本),Redis 的集群,MySQL 的主备模式等。
校验
校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个 作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID 技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。
分布式Minio优势
数据保护
分布式Minio采用 纠删码来防范多个节点宕机和位衰减 bit rot 。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
高可用
单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写数据。
一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
运行分布式Minio
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
-
分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。 为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。新版本使用MINIO_ROOT_USER&MINIO_ROOT_PASSWORD。
-
分布式Minio使用的磁盘里必须是干净的,里面没有数据。
-
下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
-
分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
-
在Windows下运行分布式Minio处于实验阶段,请悠着点使用。
8个节点,每节点1块盘
启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=12345678 minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \ http://192.168.1.13/export3 http://192.168.1.14/export4 \ http://192.168.1.15/export5 http://192.168.1.16/export6 \ http://192.168.1.17/export7 http://192.168.1.18/export8
4节点,每节点4块盘
启动分布式Minio实例,4节点,每节点4块盘,需要在4个节点上都运行下面的命令
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \
http://192.168.1.11/export3 http://192.168.1.11/export4 \
http://192.168.1.12/export1 http://192.168.1.12/export2 \
http://192.168.1.12/export3 http://192.168.1.12/export4 \
http://192.168.1.13/export1 http://192.168.1.13/export2 \
http://192.168.1.13/export3 http://192.168.1.13/export4 \
http://192.168.1.14/export1 http://192.168.1.14/export2 \
http://192.168.1.14/export3 http://192.168.1.14/export4
原文: http://wed.xjx100.cn/news/158367.html?action=onClick