自建 对象存储 – 构建高效可靠的数据存储系统

简单理解: 对象存储 就是一个网络目录,可以上传文件、下载文件。下面是 GPT 生成的介绍:

对象存储是一种存储架构,它以独立的对象的形式管理数据,而不是以文件或块的形式。每个对象都包含数据、元数据和全局唯一标识符。全局唯一标识符用于在整个系统中定位对象,无论对象在物理上位于何处。元数据则描述了数据的信息,如创建日期、类型等。

对象存储的优点在于它可以轻松扩展到PB级别,因为对象存储系统可以在任何数量的硬件设备上分布数据。此外,由于对象存储使用全局唯一标识符,因此可以在不同的地理位置存储和检索数据,这对于灾难恢复和数据保护非常有用。

对象存储常用于云存储、大数据和备份等应用,因为它可以提供高可扩展性、数据冗余和高可用性。

RustFS

GitHub:rustfs/rustfs: 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.

安装和维护:RustFS 安装和维护 – 技焉洲

只需要替换二进制文件就能从 Minio 迁移到 RustFS

先根据上面”安装和维护“在机器上安装,然后关停 minio,把 RustFS 的配置文件里的数据目录改成之前 minio 的,以及把这个目录的所有者改成运行 RustFS 的用户,启动 RustFS 即可,使用起来就跟没有迁移一样。

参考文章: https://rustfs.dev/binary-replacement-a-simple-way-to-migrate-from-minio-to-rustfs/

MinIO

MinIO 是根据 GNU Affero 通用公共许可证 v3.0 发布的已闭源高性能对象存储。它与 Amazon S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。

GitHub: minio/minio: Multi-Cloud Object Storage (github.com)
官网: MinIO | High Performance, Kubernetes Native Object Storage
服务端、客户端、SDK 下载网页: MinIO | Code and downloads to create high performance object storage

MinIO Server

Linux 文档: MinIO Object Storage for Linux — MinIO Object Storage for Linux

安装和维护: [[MinIO Server]] MinIO Server 安装和维护 – 技焉洲 (yanh.tech)

使用

  • 9000 为 API 端口,用于让程序上传下载,以及充当图床时用的也是它
  • 9001 是 Web 后台 的端口。访问 ip:9001 即可到 Web 管理后台

基本使用流程:

  1. 先到【Buckets】创建新的“桶”,输入 Bucket Name 即可,其他可不填
  2. 点击创建的桶,在【Summary】找到【Access Policy】,这里配置桶的访问权限,有预设的 Private 和 Public,还可以自定义 Custom
  3. 在【Object Browser】中,进入桶,就能创建目录、上传文件等操作;但真正发挥对象存储作用的还要靠它的客户端 mc ,利用编程将 MinIO 作为一个安全可扩展的网络存储。

服务端上文件的下载链接格式(填入 ip 或域名,桶名和文件名就可以了,注意端口是 9000)

http://ip:9000/vfly2/file.name

作为图床、视频床使用: [[31图床]] MinIO + PicList | 自建图床、视频音频床方案 – 技焉洲 (yanh.tech)

导出全部内容

使用 MinIO 客户端(mc)来导出所有的 bucket 和它们的内容。

安装: [[MinIO Client]]

然后,你需要添加你的 MinIO 服务器到 mc 的配置中。

接下来,你可以使用以下命令来列出所有的 bucket:

mc ls GNminio

然后,你可以使用以下命令来导出所有的 bucket 和它们的内容:

for bucket in $(mc ls GNminio | awk '{ print $5 }'); do
    mc cp --recursive GNminio/$bucket ./$bucket
done

这个脚本会遍历你的所有 bucket,并把它们和它们的内容复制到指定的目录,保持原有的结构。

tar -cf gn.tar ./gn
scp -P 54872 HooliA@185.47.128.73:/home/hoo/gn.tar ./
tar -xf gn.tar -C ./gn

再导入

可以用于合并两个无关的 MinIO

然后,你可以使用以下命令来创建新的 bucket 并将数据导入:

source_dir=./gn
minio_alias=local
for bucket in $(ls ${source_dir}); do
    mc mb ${minio_alias}/$bucket
    mc cp ${source_dir}/$bucket/* ${minio_alias}/$bucket
done

在这里,"/path/to/destination" 是你之前导出 bucket 和它们的内容的目录。

这个脚本会遍历你的所有 bucket,并把它们和它们的内容复制到新的 MinIO 服务器中,保持原有的结构。

然后再手动修改 bucket 的权限

最后重新生成 Access key,替换其他软件中使用的,就可以了

mc

mc 是 MinIO 的命令行客户端,用于操作和管理 MinIO

下载网页: MinIO | Code and downloads to create high performance object storage

MinIO Client — MinIO Object Storage for Linux — MinIO 客户端 — 适用于 Linux 的 MinIO 对象存储

Linux 文档: MinIO Client — MinIO Object Storage for Linux

安装: [[MinIO Client]] MinIO Client 安装 – 技焉洲 (yanh.tech)

添加服务端

mc alias ls

格式为 mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY,全大写的是要自定义的。比如,我在同一台机器上安装了 Minio Server,我可以用 local 作为它的别名(ALIAS),那么命令就是:

mc alias set local http://127.0.0.1:9000 vfly2 pass_vfly2_word

# Windows 上的 mc 用法一模一样
D:\Tool\mc\mc.exe alias set local http://127.0.0.1:9000 vfly2 pass_vfly2_word

%%

# mc alias set local http://154.23.243.28:9000 ahfei TUsAogjxw7VCp6Ks
mc alias set zgo http://23.166.168.41:9000 ahfei TUsAogjxw7VCp6Ks
mc: Configuration written to `/home/hoo/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/hoo/.mc/share`.
mc: Initialized share uploads `/home/hoo/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/hoo/.mc/share/downloads.json` file.
Added `GNminio` successfully

%%

验证是否能连接服务端

mc admin info local   # local 是上面设置服务端的别名

基本使用

mc alias --help   # 简单命令无须查文档,rm   ls   

在任何命令后面,加上 --dry-run 不实际执行

复制

# 系统上的文件上传到 别名为 local 的 MinIO 服务端的 vfly2 桶中
mc cp ~/file.name local/vfly2

# 将目录下全部文件上传,同名文件会覆盖
mc cp --recursive ~/mydata/ local/mydata/

# 也能反过来,把 MinIO 的文件复制到系统上
mc cp local/vfly2/file.name ~/
mc cp zgo/backup/NextCloudServer/20260124-060329_nextcloud.tar.gz ~/

删除

# 删除 local/backup/ImagebedServer/ 下的所有文件,目录为空时会自动删除
mc rm --recursive --force local/backup/ImagebedServer/ --dry-run

# 不会自动删除桶 backup
mc rm --recursive --force local/backup/ --dry-run

创建文件夹: mc mb — MinIO Object Storage for Linux — mc mb — 适用于 Linux 的 MinIO 对象存储

mc mb --ignore-existing local/vfly2/aatest

查找: mc find — MinIO Object Storage for Linux — mc find — 适用于 Linux 的 MinIO 对象存储

mc find local/file/ --name "*v1.8.4.*"

修改Minio中文件的标签(tags)。使用 mc tag set 命令修改文件的标签:

mc tag list local/file/xray-windows-arm64-v8a-v1.8.4.zip
mc tag set <BUCKET>/<OBJECT> <TAG_KEY>:<TAG_VALUE>
mc tag set local/file/xray-windows-arm64-v8a-v1.8.4.zip version:v1.8.4

其中:

  • <BUCKET>代表存储桶的名称。
  • <OBJECT>代表要修改标签的对象(文件)的路径。
  • <TAG_KEY>是要设置的标签键(key)。
  • <TAG_VALUE>是要设置的标签值(value)。

例如,假设您有一个名为mybucket的存储桶,并且要将名为example.txt的文件的版本标签设置为v1.0,您可以运行以下命令:

mc tag set mybucket/example.txt version:v1.0

这将在Minio中的mybucket存储桶中的example.txt文件上设置一个名为version、值为v1.0的标签。

请注意,mc客户端提供了其他标签操作命令,例如tag get用于获取文件的标签信息,tag remove用于删除标签等。您可以在Minio文档中找到更多关于mc命令行工具的详细信息。

mirror

mc mirror — MinIO Object Storage for Linux

The mc mirror command synchronizes content to MinIO deployment, similar to the rsync utility. mc mirror supports filesystems, MinIO deployments, and other S3-compatible hosts as the synchronization source.

可以用来备份,其实是同步命令(方便在旧数据上更新,减少数据传输),导出的话用 cp

如果你想备份 "mybucket" 这个 bucket 到本地的 "/backup" 目录,你可以使用以下命令:

mc mirror local/bucket_name /minio_backup/bucket_name --dry-run
mc mirror local/bucket_name /minio_backup/bucket_name

不能排除 bucket

如果你想排除一些文件或者目录,你可以使用 --exclude 参数。例如,如果你想排除所有 ".jpg" 文件,你可以使用以下命令:

./mc mirror --exclude "*.jpg" myminio/mybucket /backup

你也可以使用 --include 参数来只备份特定的文件或者目录。例如,如果你只想备份所有 ".txt" 文件,你可以使用以下命令:

./mc mirror --include "*.txt" myminio/mybucket /backup

恢复 Minio Server 的数据也是使用 Minio Client 的 mc mirror 命令,只是源和目标的位置反过来。

例如,如果你想从本地的 "/backup" 目录恢复数据到 "mybucket" 这个 bucket,你可以使用以下命令:

./mc mirror /backup myminio/mybucket

如果你在备份时使用了 --exclude 或者 --include 参数,那么在恢复时也需要使用相同的参数,以确保数据的一致性。

例如,如果你在备份时排除了所有 ".jpg" 文件,那么在恢复时也应该排除这些文件:

./mc mirror --exclude "*.jpg" /backup myminio/mybucket

原文链接: https://yanh.tech/2024/02/self-host-object-storage/

版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech)

保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,如果能留言互动就更好了。

可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。

评论

  1. fox
    2 年前
    2024-3-04 11:31:43

    点赞,大佬速更新

  2. zephyr
    1 年前
    2025-4-18 14:17:00

    博主发在其他平台的文章 链接域名失效了 好像是少数派,搜vfly2.com才找到这儿来

    • zephyr
      1 年前
      2025-4-18 21:00:12

      麻烦提醒了,少数派上大概更新了一下,之前用的 technique.vfly2.com ,现在换成 yanh.tech

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇