MinIO是专门为海量数据存储、人工智能、大数据分析而设计的对象存储系统。(早前流行的还有FastDFS)
据官方介绍,单个对象最大可存储5T,非常适合存储海量图片、视频、日志文件、备份数据和容器、虚拟镜像等。
存储到minIO的基本对象,包括文件、字节流、任何类型…
对象和关联配置的分组。
汇集到单个存储资源中的一组驱动器和一个或多个 MinIO 服务器进程。See also: tenant.
即存储数据的磁盘,在minIO启动时,以参数的方式传入。
minIO所有的对象数据都会存储在Drive里。
即一组Drive的集合,分布式部署根据集群规模自动划分一个或多个Set——每个Set的Drive分布在不同位置。
用于与 MinIO 部署或租户交互的图形用户界面 (GUI)。
其他概念具体看官方文档https://www.minio.org.cn/docs/minio/container/glossary.html#
官方解释 : MinIO 纠删码是一种数据冗余和可用性功能,允许 MinIO 部署在集群中多个驱动器或节点丢失的情况下自动动态重建对象。
纠删码提供对象级修复,其开销显着低于 RAID 或复制等相邻技术。
简单理解:
minio存储文件会通过纠删码进行冗余。
比如一个原文件进行存储后,会经过纠删码优化(压缩)后存储到其他位置。
开启纠删码模式后,miniIO可以实现低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存一个1m的文件,实际占用空间为2m)。
具体的原理先不展开
这里参考的版本较早,接下来会结合官方最新的英文文档,记录部署流程。
英文:https://min.io/docs/
中文:https://www.minio.org.cn/docs/cn/minio/kubernetes/upstream/index.html
# 镜像拉取
docker pull minio/minio;
# 创建环境变量文件
touch /etc/default/minio
vi /etc/default/minio
# 输入账号密码
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=自己改密码
MINIO_VOLUMES="/mnt/data"
#保存
# 启动容器
docker run \
-p 9001:9000 -p 9091:9090 \
-v 路径也要自己设置:/mnt/data \
-v /etc/default/minio:/etc/config.env \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
--name "minio" \
minio/minio server --console-address ":9090"
docker-compose
version: '3'
services:
minio_local1:
image: minio/minio
command: server --console-address ":9090"
container_name: minio
environment:
MINIO_CONFIG_ENV_FILE: /etc/config.env
ports:
- "9001:9000"
- "9091:9090"
volumes:
- ./data:/mnt/data
- /etc/default/minio:/etc/config.env
拉取镜像
docker pull minio/minio
在 处创建环境变量文件/etc/default/minio
。
vi /etc/default/minio
需要配置的内容如下:
MINIO_ROOT_USER=myminioadmin
MINIO_ROOT_PASSWORD=minio-secret-key-change-me
MINIO_VOLUMES="/mnt/data"
# MINIO_SERVER_URL="http://minio.example.net:9000"
基本的注释如下:
minioadmin:minioadmin
。当然,官方推荐不使用默认值,无论任何环境。配置后如下:
docker运行指令
docker run -dt \
-p 9001:9000 -p 9091:9090 \
-v PATH:/mnt/data \
-v /etc/default/minio:/etc/config.env \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
--name "minio_local1" \
minio/minio server --console-address ":9090"
成功启动打印日志可以查看:
访问9090端口,登陆控制台即可查看到:
MC和linux指令类似,为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案
ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。
64-bit Intel
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc
chmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/
mc --help
更多安装方式:https://min.io/docs/minio/linux/reference/minio-mc.html?ref=docs
# 查看当前已配置的服务器
mc config host ls
# 添加服务器配置
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE>
# 举个例子
mc config host add minio-local1 http://localhost:9000 通行码 秘钥
mc的大部分指令都有很完整的案例,使用–help参数即可查看详细
举个例子
mc ls minio-local1/first-bucket
# 下载文件
mc cp minio-local1/first-bucket/pom.xml /home
# 上传文件
mc cp docker-compose.yml minio-local1/first-bucket
举个例子
# 创建几个桶
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket
Bucket created successfully `minio-local1/new-bucket`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket2
Bucket created successfully `minio-local1/new-bucket2`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket3
Bucket created successfully `minio-local1/new-bucket3`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket4
Bucket created successfully `minio-local1/new-bucket4`.
# 删除几个桶
root@VM-12-17-ubuntu:/home/nexus3# mc rb minio-local1/new-bucket4
Removed `minio-local1/new-bucket4` successfully.
root@VM-12-17-ubuntu:/home/nexus3# mc rb minio-local1/new-bucket2
Removed `minio-local1/new-bucket2` successfully.
MinIO 客户端 “mc” 命令行工具提供命令 用于在 MinIO 部署上执行管理任务的命令。
现在一般用界面代替,不详细看了
官方文档地址:https://min.io/docs/minio/linux/reference/minio-mc-admin.html
Minio使用纠删码erasure code
和校验和checksum
来保护数据免受硬件故障和无声数据损坏。
即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。
这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复,是不是很NB,感兴趣的同学请google。
纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。
而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,回复速度很快,而RAID是作用在卷级别,数据恢复时间很长。
Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。
Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。