1. MinIO 简介

每日一库之145:MinIO(高性能对象存储) - 图1

MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio,官网是 https://min.io

它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。

国内阿里巴巴、腾讯、百度、华为、中国移动、中国联通等企业在使用 MinIO,甚至不少商业公司二次开发 MinIO 来提供商业化的云存储产品。

疑问:为什么越来越少使用 FastDFS 实现文件存储服务呢?

部署运维复杂、无官方文档、缺乏长期维护的团队、性能较差、未提供 Docker & Kubernetes 集成方案等等原因。

2. MinIO Server 安装

由于 MinIO 是 Go 写的,所以就一个运行程序,因此安装部署 MinIO 就非常简单。

在文档 https://min.io/download 中,有 Windows、Linux、MacOS、Docker、Kubernetes、Source 六种安装方式。

下面,我们来安装下 MinIO,你可以选择适合你的方式。

2.1 快速安装

2.1.1 Windows

需要在 Windows PowerShell 中执行。

  1. Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "C:\minio.exe" ## 国外资源,龟速下载
  2. setx MINIO_ROOT_USER admin
  3. setx MINIO_ROOT_PASSWORD password
  4. C:\minio.exe server F:\Data --console-address ":9001" ## F:\Data 存储目录;--console-address 是 UI 界面的端口

2.1.2 Linux

  1. wget https://dl.min.io/server/minio/release/linux-amd64/minio ## 国外资源,龟速下载
  2. chmod +x minio
  3. MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /Users/yunai/minio --console-address ":9001" ## /Users/yunai/minio 存储目录;--console-address 是 UI 界面的端口

2.1.3 MacOS

  1. wget https://dl.min.io/server/minio/release/darwin-amd64/minio ## 国外资源,龟速下载
  2. chmod +x minio
  3. MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server F:\Data --console-address ":9001" ## F:\Data 存储目录;--console-address 是 UI 界面的端口

2.1.4 Docker

① Windows:

  1. docker run -p 9000:9000 -p 9001:9001 -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=password" minio/minio server /data --console-address ":9001" # /Users/yunai/minio 存储目录;--console-address 是 UI 界面的端口

② Linux 或 MacOS:

  1. docker run -p 9000:9000 -p 9001:9001 -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=password" minio/minio server /Users/yunai/minio --console-address ":9001" ## /Users/yunai/minio 存储目录;--console-address 是 UI 界面的端口

2.2 访问 UI 界面

使用浏览器访问 http://127.0.0.1:9001 地址,访问 MinIO 内置的 UI 界面。

输入账号 admin,密码 password 进行登录,成功进入首页。

UI 首页

2.3 新建存储桶

点击 [Create Bucket] 按钮,新建一个 Bucket 存储桶,用于稍后文件的上传。

Create Bucket

2.4 添加 readonly 访问规则

默认配置下,访问存储桶是需要请求授权的。但是在实际场景下,我们往往希望允许直接访问,此时就需要添加一条 readonly 访问规则。

① 点击右上角的 [Configure Bucket] 设置图标,然后选择 [Access Rules] 菜单。

Access Rules

② 点击 [Add Access Rule] 按钮,添加一条 Prefix 为 / Access 为 readonly 的规则。

Add Access Rule

2.5 上传文件

点击 [Upload] 按钮,点击 [Upload File] 选项,选择一个图片上传。

Upload File

2.6 访问文件

文件的访问地址的格式为 <http://127.0.0.1:9000/{bucket}/{name}>,注意是 9000 端口。

我们刚上传的文件 {bucket} 是 yudaoyuanma,{name} 是 822aebded6e6414e912534c6091771a4.jpg,所以最终的访问路径是 http://127.0.0.1:9000/yudaoyuanma/822aebded6e6414e912534c6091771a4.jpg。

访问文件

3. MinIO Client 命令行工具

MinIO Client (mc) 是 MinIO 提供的命令行工具,用于访问 MinIO Server。它的命令设计的非常棒,和我们在使用 ls、cat、cp、mirror、diff、find 等 Unix 命令基本接近,主要如下:

  1. ls 列出文件和文件夹
  2. mb 创建一个存储桶或一个文件夹
  3. cat 显示文件和对象内容
  4. pipe 将一个 STDIN 重定向到一个对象或者文件或者 STDOUT
  5. share 生成用于共享的 URL
  6. cp 拷贝文件和对象
  7. mirror 给存储桶和文件夹做镜像
  8. find 基于参数查找文件
  9. diff 对两个文件夹或者存储桶比较差异
  10. rm 删除文件和对象
  11. events 管理对象通知
  12. watch 监听文件和对象的事件
  13. policy 管理访问策略
  14. session cp 命令管理保存的会话
  15. config 管理 mc 配置文件
  16. update 检查软件更新
  17. version 输出版本信息

例如说,使用 mc ls 列出有哪些 Bucket 存储桶:
mc 示例