文章目录
- 一、前言
- 1、介绍说明
- 2、部署方式
- 3、冗余模式
- 4、约束限制
- 4.1、规格参数
- 4.2、API支持
- a、minio不支持的Amazon S3 Bucket API
- b、minio不支持的Amazon S3 Object API
- 二、部署说明
- 1、软件安装
- 2、minio单机部署
- 3、minio分布式部署
- 3.1、前置条件
- 3.2、开始运行
- 3.3、操作说明
- 三、关于MC(minio client)
- 1、安装部署
- 2、连接配置
- 3、访问操作
一、前言
minio官方入门指南
minio分布式纠删介绍
1、介绍说明
minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
minio具备以下特点
-
数据保护
分布式minio采用 erasure code来防范多个节点宕机和位衰减bit rot。
分布式minio至少需要4个节点,使用分布式minio自动引入了纠删码功能。 -
高可用
单机minio服务存在单点故障,相反,如果是一个N节点的分布式minio,只要有N/2节点在线,你的数据就是安全的,可以正常进行读取对象操作。不过你需要至少有N/2+1个节点来创建新的对象
例如,一个8节点的minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据。 -
限制
分布式minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了minio的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个minio实例。
注意,只要遵守分布式minio的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用2个节点,每个节点4块盘,也可以使用4个节点,每个节点两块盘,诸如此类。 -
一致性
minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
2、部署方式
minio支持单机部署及分布式部署两种方式:
- 单机部署仅作为网关角色使用,将一个本地目录通过s3协议共享出去,不具备任何冗余功能
- 分布式部署可以将多块硬盘(甚至在不同服务器上)组成一个对象存储服务,由于硬盘分布在不同服务器上,可以避免单点故障
3、冗余模式
minio只支持纠删码冗余模式,纠删码是一种恢复丢失和损坏数据的数学算法, minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。
纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。
4、约束限制
4.1、规格参数
规格说明 | 参数说明 |
---|---|
最大驱动器数量 | 16 |
最小驱动器数量 | 4 |
读仲裁 | N / 2 |
写仲裁 | N / 2+1 |
Web浏览器上传大小限制 | 5 GB |
最大桶数 | 无限额 |
每桶最大对象数 | 无限额 |
最大对象大小 | 5 TB |
最小对象大小 | 0 B |
每次PUT操作的最大对象大小 | 5 GB |
每次上传的最大Part数量 | 10,000 |
Part 大小 | 5 MB到5 GB. 最后一个part可以从0 B到5 GB |
每次list parts请求可返回的part最大数量 | 1000 |
每次list objects请求可返回的object最大数量 | 1000 |
每次list multipart uploads请求可返回的multipart uploads最大数量 | 1000 |
4.2、API支持
a、minio不支持的Amazon S3 Bucket API
- BucketACL (可以用 bucket policies)
- BucketCORS (所有HTTP方法的所有存储桶都默认启用CORS)
- BucketLifecycle (minio纠删码不需要)
- BucketReplication (可以用 mc mirror)
- BucketVersions, BucketVersioning (可以用 s3git)
- BucketWebsite (可以用 caddy or nginx)
- BucketAnalytics, BucketMetrics, BucketLogging (可以用 bucket notification APIs)
- BucketRequestPayment
- BucketTagging
b、minio不支持的Amazon S3 Object API
- ObjectACL (可以用 bucket policies)
- ObjectTorrent
二、部署说明
1、软件安装
- minio安装非常简单,直接下载二进制文件,拷贝到/usr/bin文件运行即可
yum install wget
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/bin
- 关闭防火墙或者开放指定访问端口
直接关闭防火墙
[root@node27 ~]# systemctl stop firewalld
[root@node27 ~]# systemctl disable firewalld开启防火墙,允许9000~9010端口或是9000端口访问
[root@node27 ~]# firewall-cmd --zone=public --add-port=9000:9010/tcp --permanent
[root@node27 ~]# firewall-cmd --zone=public --add-port=9000/tcp --permanent
[root@node27 ~]# firewall-cmd --reload--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
2、minio单机部署
Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL
执行minio server </local-path>
命令,可以将本地目录通过s3协议共享出去
默认访问端口为9000,访问对应IP地址即可,如http://172.16.21.27:9000
示例如下,将/disk01目录通过s3协议共享出去
minio server /disk01/
3、minio分布式部署
3.1、前置条件
- 完成minio软件包安装
- 分布式minio里所有的节点需要有同样的access key和secret key,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access key和secret key export成环境变量
- 分布式minio使用的磁盘里必须是干净的(提供空目录即可),里面没有数据
- 分布式minio里的节点时间差不能超过3秒,可以使用NTP 来保证时间一致
3.2、开始运行
启动一个分布式minio实例,只需要把硬盘位置做为参数传给minio server命令即可,然后在所有其它节点运行同样的命令
示例:存在节点27、28、29、233、234、235六个节点,每个节点有两个磁盘,分别挂载在/disk01和/disk02目录下
所有节点下执行命令如下,之后访问任意节点的9000端口即可访问到分布式minio集群数据
export minio_ACCESS_KEY=user0001;
export minio_SECRET_KEY=user0001;
minio server http://10.0.0.27/disk01 http://10.0.0.27/disk02 http://10.0.0.28/disk01 http://10.0.0.28/disk02 http://10.0.0.29/disk01 http://10.0.0.29/disk02 http://10.0.0.233/disk01 http://10.0.0.233/disk02 http://10.0.0.234/disk01 http://10.0.0.234/disk02 http://10.0.0.235/disk01 http://10.0.0.235/disk02
- 若启动分布式minio实例出现
1st disk is already being used in another erasure deployment.
尝试解除磁盘挂载,重新格式化磁盘后再挂载,之后重新启动分布式minio实例
3.3、操作说明
- 通过export设置设置秘钥
启动minio服务进程服务前,手动执行export设置访问秘钥
export minio_ACCESS_KEY=user01;export minio_SECRET_KEY=user01;
- 通过export设置设置纠删比
启动minio服务进程服务前,手动执行export设置纠删比
export minio_STORAGE_CLASS_STANDARD=EC:3
三、关于MC(minio client)
minio Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)
1、安装部署
直接下载二进制文件,拷贝至/usr/bin/目录运行即可
yum install wget
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/bin/
2、连接配置
通用命令:mc config host add <storage-name> <s3-endpoint> <ACCESS_KEY> <SECRET_KEY>
参考示例如下:
mc config host add myminion http://10.0.0.27:9000 user0001 user0001
3、访问操作
当与minio成功连接完成后,可通过以下命令进行访问操作
mc config host {}
- ls 列出文件和文件夹
- mb 创建一个存储桶或一个文件夹
- cat 显示文件和对象内容
- pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT
- share 生成用于共享的URL
- cp 拷贝文件和对象
- mirror 给存储桶和文件夹做镜像
- find 基于参数查找文件
- diff 对两个文件夹或者存储桶比较差异
- rm 删除文件和对象
- events 管理对象通知
- watch 监听文件和对象的事件
- policy 管理访问策略
- session 为cp命令管理保存的会话
- config 管理mc配置文件
- update 检查软件更新
- version 输出版本信息