一、MinIO 简介
MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,适合存储大容量非结构化的数据,如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。一个对象文件可以是任意大小,从几 KB 到最大 5TB 不等。MinIO 是一个轻量的服务,可以很简单地与其他应用结合。
二、安装 MinIO
-
Docker 容器(稳定版或尝鲜版)
使用以下命令运行 Docker 容器:docker run -p 9000:9000 minio/minio:edge server/data
,更多 Docker 部署信息可访问相关链接。 -
macOS(使用 Homebrew)
若之前使用brew install minio
安装过 MinIO,可使用minio/stable/minio
官方镜像进行重装。注意由于 Go1.8 的 bug,Homebrew 版本不太稳定。
下载地址:https://dl.minio.io/server/minio/release/darwin-amd64/minio
-
GNU/Linux
下载地址:https://dl.minio.io/server/minio/release/linux-amd64/minio
-
微软 Windows 系统
下载地址:https://dl.minio.io/server/minio/release/windows-amd64/minio.exe
-
FreeBSD
使用 pkg 进行安装。 -
使用源码安装(仅供开发人员和高级用户使用)
需先参考相关文档安装 Go 语言环境。
三、验证 MinIO
安装后,可使用浏览器访问 http://127.0.0.1:9000
,若能访问则表示安装成功。
四、使用 MinIO 客户端 mc(Minio Client)
mc 提供了一些 Unix 常用命令的替代品,支持文件系统和亚马逊 S3 云存储服务等。更多信息参考 mc 快速入门指南。
-
mc shell 自动补全
如果使用的是 bash、zsh 或 fish,shell 补全默认嵌入在 mc 中,安装自动补全使用mc --autocompletion
,重新启动 shell 后 mc 将自动完成命令。 -
查看 mc 版本
使用mc --version
命令。 -
列出存储桶
例如,使用mc ls play
列出来自https://play.min.io
的所有存储桶(以 json 格式列出可使用mc --json ls play
)。 -
创建桶
使用mb
命令在对象存储上创建新存储桶,其行为类似于文件系统中的mkdir -p
命令。需注意 bucket 相当于文件系统中的驱动器或挂载点,不应视为文件夹,MinIO 对每个用户创建的存储桶数量没有限制。
首先添加 MinIO 存储服务:cd /opt/bigdata/minio
,然后执行./mc config host add minio http://local-168-182-110:19000 admin admin123456
,最后创建新存储桶:mc mb minio/mybucket
。 -
复制文件
使用cp
命令将数据从一个或多个源复制到目标,例如mc cp wget-log minio/mybucket
。 -
日常使用
可以添加 shell 别名来覆盖常用的 Unix 工具,例如:alias ls='mcls'
alias cp='mccp'
alias cat='mccat'
alias mkdir='mcmb'
alias pipe='mcpipe'
alias find='mcfind'
alias tree='mctree'
-
MinIO 管理员操作
mc 提供admin
子命令来执行管理任务,例如:- 查看集群信息:
mc admin info minio
(为方便使用,可设置别名alias minfo='mcadmin info'
,然后执行minfo minio
)。 - 全局选项:
--debug
选项用于显示详细调试输出,例如mc admin info --debug minio
。--json
选项启用 json 行格式的可解析输出,例如mc admin --json info minio
。
- 命令 service:用于重启和停止所有 MinIO 服务器,例如
mc admin service restart minio
。 - 命令 policy:用于添加、删除、列出策略、获取策略信息以及为 MinIO 服务器上的用户设置策略等操作。
- 查看集群信息:
五、MinIO 基础概念
- Object:存储到 MinIO 的基本对象,如文件、字节流等。
- Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据相互隔离,对于客户端而言,相当于一个存放文件的顶层文件夹。
- Drive:即存储数据的磁盘,在 MinIO 启动时以参数方式传入,MinIO 中所有的对象数据都会存储在 Drive 里。
- Set:一组 Drive 的集合,分布式部署时根据集群规模自动划分一个或多个 Set,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上,一个集群会划分为多个 Set,一个 Set 包含的 Drive 数量是固定的,默认由系统根据集群规模自动计算得出,且一个 Set 中的 Drive 会尽可能分布在不同的节点上。
-
MinIO特点
数据保护
Minio使用Minio Erasure Code(纠删码)来防止硬件故障。即便损坏一半以上的driver,但是仍然可以从中恢复。
高性能
作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率
可扩容
不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心
SDK支持
基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持
有操作页面
面向用户友好的简单操作界面,非常方便的管理Bucket及里面的文件资源
功能简单
这一设计原则让MinIO不容易出错、更快启动
丰富的API
支持文件资源的分享连接及分享链接的过期策略、存储桶操作、文件列表访问及文件上传下载的基本功能等。
文件变化主动通知
存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并通过以下方式发布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、Webhooks等。
六、通过 API 操作 MinIO(以 Python 的 boto3 库为例)
- 安装 boto3 库:
pip install boto3
- 配置 MinIO 的访问信息,示例代码如下:
minio_endpoint = "http://localhost:9000"
access_key = "minioadmin" # 默认的用户名
secret_key = "minioadmin" # 默认的密码
s3 = boto3.client("s3", endpoint_url=minio_endpoint,
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
use_ssl=False,
verify=False)
- 常见操作示例:
- 创建存储桶:
s3.create_bucket(bucket="mybucket")
- 上传文件:
s3.upload_file(file_path, bucket_name, "uploaded_file.txt")
,其中file_path
为要上传的文件路径,bucket_name
为目标存储桶名称。
- 创建存储桶:
七、启动 MinIO 服务(以 Windows 系统为例)
- 创建数据存储目录,例如在 D 盘下创建一个名为
minio_data
的目录。 - 打开命令提示符或 PowerShell,切换到
minio.exe
所在的目录,运行以下命令启动 MinIO 服务:minio.exe server d:\minio_data --console-address ":9001"
。该命令会使用d:\minio_data
目录来存储数据,并将管理控制台运行在 9001 端口,MinIO 的 API 默认运行在 9000 端口。 - 可通过浏览器访问
http://localhost:9001
打开 MinIO 的管理控制台,进行创建和管理存储桶、上传和下载文件等操作。 - 停止 MinIO 服务,可在命令提示符或 PowerShell 中按下 Ctrl+C 来中断 MinIO 的进程,或直接关闭运行 MinIO 的命令行窗口。若将 MinIO 作为后台服务运行,可能需要使用服务管理工具来停止它。
在实际使用中,请注意保护好 MinIO 的访问密钥,确保数据的安全性。同时,根据具体的需求和场景,合理配置 MinIO 的相关参数和设置。更多高级功能和详细信息,请参考 MinIO 的官方文档。