TOC

Minio 对象存储

MinIO LOGO

根据网络上各处搜集来的资料:

  1. 2016 年,由 MinIO, Inc 发布,四年来,项目一直比较活跃
  2. Go 语言 + Apache License 2.0 AGPLv3

    As of April 23 2021 MinIO, Inc submitted a change that re-licensed the project from its previous Apache V2 to GNU Affero Public License Version 3 (AGPLv3).

  3. 官网:https://min.io,中文社区:http://www.minio.org.cn/
  4. 仓库:https://github.com/minio/minio
  5. 文件大小限制:单文件小于 5TB

与之像类似的还有在 OpenStack 中广泛使用的 Ceph 和 Swift,应该都很成熟了。
但是架不住 minio 真的是上手极快(学习成本低 + 部署简单 + 各种 SDK),还带一个 UI,这样方便融入业务的良心软件,哪里去找?

服务端

wget -c https://dl.min.io/server/minio/release/linux-amd64/minio -P ~/SWAP

MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 ~/SWAP/minio server /tmp/minio

默认会在所有 IP 的 9000 端口启动 Web 管理服务,可以使用浏览器进行简单操作。

客户端

wget -c https://dl.min.io/client/mc/release/linux-amd64/mc -P ~/SWAP

~/SWAP/mc
mc: Configuration written to `/home/markjour/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/markjour/.mc/share`.
mc: Initialized share uploads `/home/markjour/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/markjour/.mc/share/downloads.json` file.
<help string>

vim ~/.mc/config.json # 设置 local 的 ACCESS_KEY 和 SECRET_KEY

~/SWAP/mc mb local/new
~/SWAP/mc cp ks.cfg local/new --attr "key1=a@b.c;key2=x@y.z"
~/SWAP/mc stat local/new/ks.cfg
# Name      : ks.cfg
# Date      : 2019-01-17 00:51:29 CST
# Size      : 1.2 KiB
# ETag      : 4b8295b9e63f046dcc8806fd0a16d0d6
# Type      : file
# Metadata  :
#   X-Amz-Meta-Key2    : x@y.z
#   X-Amz-Meta-Key1    : a@b.c
#   Content-Type       : application/octet-stream
#   X-Amz-Meta-Mc-Attrs: atime:1609749937#904037936/gid:1000/gname:markjour/mode:33188/mtime:1547657489#184461751/uid:1000/uname:markjour

客户端操作非常便利

  • ls
  • cp 上传,下载文件,就像 scp 一样
    也可以从本地复制到本地,我试了,attr 参数没有效果,就是简单文件复制(可以上 /tmp/minio 目录找一下元数据存储位置
    或许可以从远程复制到远程,甚至不同源之间相互复制
  • cat 查看文件
  • mb 创建 Bucket,估计是 Make Bucket,类似于 mkdir
  • find 和 find 命令很像
  • tree 列出目录结构,有 -f 列出文件,-d 指定深度等参数可用

有一个命令 pipe 可以用来从标准输入,在命令管道中使用。如果我们就是用来存储一些小文件,估计不会用到这个功能。

疑问

  1. 是否必须依赖文件系统,可不可以直接存储在块设备中?
    文档里没有提到,我猜可能不行。
  2. 文件数量升起来,文件系统支撑不住怎么办?有没有性能问题?