试试 MinIO——自托管的 S3 兼容高性能对象存储

探索 MinIO:自托管的 S3 兼容高性能对象存储

您是否正在为您的服务器寻找一款可靠的对象存储软件?

如果答案是肯定的,那么您来对地方了!

云端对象存储服务如 AWS S3 等不胜枚举,但如果您需要在自己的服务器上托管数据,MinIO 绝对是您的理想之选。它能助您在数据中心内构建专属的数据存储方案。

MinIO 是一款开源、广受欢迎的分布式对象存储软件,它与 S3 接口完全兼容。 该软件专为企业级应用打造,并以卓越的性能著称。

从简单的 Web 应用到需要处理大规模数据分布的分析和机器学习应用,MinIO 都能轻松应对。它在多种场景下都能发挥重要作用。

  • 标准的文件存储
  • 多云数据分发
  • 灾难恢复
  • 数据分析

它会是庞大复杂的软件吗?

恰恰相反,它的体积仅有大约 50MB,并且对 Kubernetes 环境非常友好。它将数据和元数据均作为对象进行存储,无需依赖额外的数据库或其他软件来存储元数据,从而提高了性能。

以下架构图来自 MinIO 官方网站。

现在,让我们深入了解一下 MinIO 的一些关键特性。

  • 卓越性能:正如标题所述,它拥有惊人的读写速度,高达约 170GB/s。
  • 高度可扩展:您可以根据需求进行集群和扩展。
  • 云原生:与云环境无缝集成。
  • 数据保护:采用纠删码技术进行数据保护。
  • 多重加密支持:支持 AES-CBC、AES-256-GCM、ChaCha20 等多种加密方式。
  • 兼容主流 KMS:与常见的密钥管理系统兼容。
  • 应用程序和用户身份验证:提供强大的身份验证功能。
  • 事件通知:可以配置事件通知。
  • 联邦:支持使用 etcd 和 CoreDNS 进行联邦。

MinIO 是软件定义存储的理想选择。接下来,我们将探讨如何进行安装配置。

安装 MinIO 服务器

您可以在 Linux、Windows、macOS 上安装 MinIO,也可以通过 Kubernetes 进行部署。如果您偏好从源代码编译,只要安装了 Golang 就可以实现。

在本演示中,我将在托管于 Kamatera 的服务器上进行安装。

  • 首先,登录您的服务器。
  • 在您选择的文件系统下创建一个文件夹,例如 ‘minio-server’。
  • 进入新创建的文件夹,并运行以下 wget 命令:
wget https://dl.min.io/server/minio/release/linux-amd64/minio

此命令将下载一个二进制文件,其信息如下:

-rw-r--r--  1 root root 48271360 Oct 18 21:57 minio

使用 chmod 命令赋予该文件执行权限:

chmod 755 minio

现在,让我们启动 MinIO 服务器:

./minio server /data &

上述命令中的 ‘/data’ 是 MinIO 存储对象的文件系统路径。

启动过程非常迅速,您将看到类似以下的启动信息:

Endpoint:  http://xx.71.141.xx:9000 http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin

Browser Access:
   http://xx.71.141.xx:9000 http://127.0.0.1:9000

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://xx.71.141.xx:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

现在,我们可以使用默认凭据 minioadmin:minioadmin 在浏览器中访问 MinIO。

界面简洁明了,但首先,我们需要修改默认凭据,因为存在安全风险。虽然不能直接在浏览器上更改管理员凭据,但可以通过环境变量的方式进行修改。

为了更改 MinIO 的默认凭据,我们需要导出访问密钥和密钥,如下所示,然后再启动 MinIO:

export MINIO_ACCESS_KEY=techblik.com
export MINIO_SECRET_KEY=geekpassword
./minio server /data &

现在,启动时就不会再出现关于默认凭据的警告了。

让我们尝试上传一些文件:

  • 点击右下角的 “+” 图标,创建一个存储桶。
  • 我上传了一个测试文件,它立即在浏览器上可见。

在服务器上:

[[email protected] geekflare]# ls -ltr
total 4
-rw-r--r-- 1 root root 11 Oct 19 11:09 MinIO-Test.txt
[[email protected] geekflare]#

点击浏览器上的文件共享按钮,您可以获得可共享的链接,并设置过期时间。

MinIO 客户端

MinIO 客户端不仅仅是 aws-cli 的替代品,它让您可以轻松管理您的存储。此客户端适用于 Windows、macOS 和 Linux 系统。

要在 Linux 上安装,请运行以下命令:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod 755 mc

运行 ‘mc’ 命令查看命令帮助:

[[email protected] ~]# ./mc
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove objects
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  policy     manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release

GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/root/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version

TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2020-10-03T02-54-56Z
[[email protected] ~]#

让我们尝试使用 ‘mc’ 命令列出我上传的文件。

首先,我们需要为要管理的存储设置别名:

[[email protected] ~]# ./mc alias set minio http://xx.71.141.xx:9000/ techblik.com geekpassword
Added `minio` successfully.
[[email protected] ~]#
  • ‘minio’ 是别名,您可以将其更改为您想要的任何内容。
  • 将 HTTP 端点更改为您的实际端点。
  • 使用您修改后的访问密钥和密钥。

使用如下所示的 ‘ls’ 命令列出文件:

[[email protected] ~]# ./mc ls --recursive minio
[2020-10-19 11:09:06 UTC]    11B techblik.com/MinIO-Test.txt
[[email protected] ~]#

太棒了!一切正常!

您可以使用客户端执行所有操作。它不仅可以管理 MinIO 云存储,还可以管理 GCS、AWS S3、Azure 等。

查看客户端快速入门指南,了解更多详细信息。

MinIO SDK

根据您的应用程序堆栈,您可以使用 SDK 以编程方式与对象存储进行交互。 它支持 Go、Python、Node.js、.NET、Haskell 和 Java。

MinIO 网关

可以将 MinIO 网关添加到 S3、Azure、NAS、HDFS 中,以利用 MinIO 浏览器和磁盘缓存。

结论

如果您正在寻找私有、混合或多云对象存储方案,那么 MinIO 无疑是一个非常有前景的选择。不妨亲自体验一下,您一定会爱上它。为了进行测试,您可以获取 Kamatera 的 MinIO 虚拟机,或者在任何云服务器上自行安装。