高性能 在标准硬件上,读/写速度上高达183GB/秒和171GB/秒
可扩展性 利用了web缩放器知识,简单的通过添加机器就可扩展集群
云原生 支持k8s,微服务和多租户的容器技术
S3兼容 采用了S3兼容协议(阿里云oss等也支持该协议)
简单 安装使用都非常简单,一个命令启动
以下夸张的描述来自官网,非笔者瞎编
全世界增长最快的对象存储系统
MinIO生产部署涵盖了全球。 作为全球使用最多和下载量最大的对象存储服务系统, 它的影响力在与日俱增 - 由非凡的贡献者和传播者社区提供支持。
得益于go语言跨平台交叉编译功能,只需将包打成 对应系统架构,无需在服务器安装环境,既可一键运行启动
minio分服务端minio 和客户端工具mc 两个
服务端安装
在linux上安装
类似于一个命令行工个,指定存储目录/data 直接就启动了
wget http:
chmod +x minio
./minio server /data
docker安装
比较推荐这种方式,方便维护
这里的9000端口是api调用的,9001是web ui的页面,直接访问http://ip:9001 然后输入默认账密: minioadmin/minioadmin 登陆
docker run \
-p 9000:9000 \
-p 9001:9001 \
minio/minio server /data --console-address ":9001"
默认我们安装的都是社区版,它的Dashborad是个简单页面
安户端安装
客户端也是一个命令行工具,mc
wget https:
mv mc /usr/local/bin/
---该章内容来源于官网文档
minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。丢失一半数量(N/2)的硬盘,依然可以恢复数据
什么是纠删码erasure code?
纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复
启动minio 指定4个盘,拿到2个盘,检查minio是否可以正常读写
minio server /data1 /data2 /data3 /data4
MinIOserver在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json
文件中
可以使用--config-dir命令行选项重写
minio server --config-dir /etc/minio /data
证书目录默认在${HOME}/.minio/certs
目录下,如果需要TLS,需要将证书放在该目录来启用https
MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务
service 服务重启并停止所有MinIO服务器
update 更新更新所有MinIO服务器
info 信息显示MinIO服务器信息
user 用户管理用户
group 小组管理小组
policy MinIO服务器中定义的策略管理策略
config 配置管理MinIO服务器配置
heal 修复MinIO服务器上的磁盘,存储桶和对象
profile 概要文件生成概要文件数据以进行调试
top 顶部提供MinIO的顶部统计信息
trace 跟踪显示MinIO服务器的http跟踪
console 控制台显示MinIO服务器的控制台日志
prometheus Prometheus管理Prometheus配置
kms kms执行KMS管理操作
使用之前请设置好服务器地址,请见客户端mc使用
-使用示例
-配置服务器地址
#查看myminio bucket信息
mc admin info myminio
#查看myminio bucket用户信息
mc admin user list myminio
最大最小没有限制
读写仲裁 读可以失去一半硬盘数(N/2),写必须是一半+1(N/2+1)
web浏览上传最大5G
API相关:
没有桶数限制,没有对象数限制
单个最大对象为5,PUT操作最大对象为5G
每次上传的Part数最大为1000
Part大小从5M到5G
查看列表,返回值对象和Part最大数量均为1000
minio默认支持tls安全访问,需要将私钥和公钥放到指定目录
公私钥必须命名为private.key和public.crt,然后放到minio同级另目录下的config(需要创建)
Minio在Linux只支持使用PEM格式的key/certificate
如果想使用Let's Encrypt请进入官网: docs.minio.org.cn/docs/master…
不过推荐使用openssl生成,比较简单:
#生成私钥
openssl genrsa -out private.key 2048
#生成公钥
openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj "/C=CH/ST=state/L=location/O=organization/CN=domain"
客户端mc使用
一些操作,minio ui上功能基本上都有,可以直接在页面点击按钮进行操作,但是客户端mc,也需要熟悉是不
启用shell自动补全
下载官方提供的自动补全配置,使用时 按TAB键补全
sudo wget https:
source /etc/bash_completion.d/mc
MinIO Client(mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案
在没有配置minio服务端时,执行以下命令就像执行系统命令,操作的也是系统上的文件,而不是minio
ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。
配置服务器地址
mc alias set myminio http:
创建一个bucket
mc mb myminio/test2
mc cp /var/log/messages myminio/test2
列出目录文件
mc ls myminio/test2
查看文件内容
mc cat myminio/test2/messages
删除文件或对象
mc rm myminio/test2/messages
像级了在linux操作一样,确实是UNIX命令一种替代方案
如果bucket发生了上传对象或删除对象等,通过存储桶事件通知机制进行监控,并支持mq,sql,webhooks等发送出去,或存储起来
webhooks发布minio事件
webhooks是采用推送的方式,将数据发送给定义好的api
配置webhook
localhost:3000是自已编写的api接口
"webhook": {
"1": {
"enable": true,
"endpoint": "http://localhost:3000/"
启用bucket通知
新增一个名称为images 的bucket,并开启事件通知
#创建bucket
mc mb myminio/images
#创建bucket
mc mb myminio/images-thumbnail
#开启事件通知 ARN是arn:minio:sqs:us-east-1:1:webhook
mc event add myminio/images arn:minio:sqs:us-east-1:1:webhook --events put --suffix .jpg
查看事件通知列表
mc event list myminio/images
当有上传和删除等操作时,通过自已的3000端口api,可以收到相应通知信息
arn:minio:sqs:us-east-1:1:webhook s3:ObjectCreated:* Filter: suffix=".jpg"
ARN不作过多讨论,详情请看: docs.aws.amazon.com/general/lat…
Thumnailer接收事件
如果自已不想编写接口来接收事件,可以使用第三方项目: Thumnailer
使用Thumbnailer监听MinIO通知。如果有文件上传到MinIO服务,Thumnailer监听到该通知,生成一个缩略图并上传到MinIO服务
git clone https:
#安装依懒模块
npm install
#配置minio server信息,地址账密,和bucket桶(images-thumbnail)
cd thumbnailer
vim config/webhook.json
NODE_ENV=webhook node thumbnail-webhook.js
启动后的Thumnailer临听在 http://localhost:3000 和上面对应上了-_-
测试事件通知
#上传一张图片,普通文件也行
mc cp images.jpg myminio/images
#查看是否缩略图,有表示事件通知接收到了
mc ls myminio/images-thumbnail
在consule ui页面上创建账号,权限分为只读,只写,读写,排查,以及UI管理员
如果创建bucket没有设置权限的话,默认允许所有权限。当用户有对应的权限,就可以直接该问bucket
详细例子请参考官网: docs.minio.org.cn/docs/master…
以下接口需要通知9000端口访问
minio默认提供了2个接口路径做健康检查
活力探针 /minio/health/live
活动性探针-服务器是否工作正常
就绪探针 /minio/health/ready
就绪性探针-指示服务器是否由于重负载而未接受连接
集成到prometheus
默认也是公开接口并提供了相关监控数据,给到prometheus抓取指标
Prometheus 数据可在 /minio/prometheus/metrics
配置prometheus监控minio
scrape_configs:
- job_name: minio-job
metrics_path: /minio/prometheus/metrics
scheme: http
static_configs:
- targets: ['localhost:9000']
具体指标含义请参考:docs.minio.org.cn/docs/master…