RustFs 部署教程和从 MinIO 迁移到 RustFS 过程

最近 MinIO 社区发生了一件让人担忧的事情。官方为了推进商业化进程,将社区开源版本中的控制台代码删除得一干二净。这种做法不仅引发了社区的强烈反响,更重要的是动摇了用户对项目的信任基础。我们不得不重新评估技术栈,并决定迁移到其他更可靠的对象存储解决方案。

我们最终选择了近期备受关注的国产开源对象存储系统 —— RustFS

RustFS 技术概览

RustFS 用热门安全的 Rust 语言开发,兼容 S3 协议。适用于 AI / ML 及海量数据存储、大数据、互联网、工业和保密存储等全部场景。近乎免费使用。遵循 Apache 2 协议,支持国产保密设备和系统。

项目资源:

项目活跃度

Stargazers over time

使用 Docker Compose 快速部署

💡 详细部署文档请参考:Docker 安装 RustFS | RustFS

以下是一个典型的 Docker Compose 配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs
restart: always
ports:
- "19000:9000"
volumes:
- /data/rustfs/volumes/data:/data
environment:
- TZ=Asia/Shanghai
- RUSTFS_ACCESS_KEY=YOUR_ACCESS_KEY
- RUSTFS_SECRET_KEY=YOUR_SECRET_KEY
- RUSTFS_CONSOLE_ENABLE=true
# - RUSTFS_SERVER_DOMAINS=example.com

部署完成后,通过 http://ip:19000 即可访问管理控制台:

RustFS控制台界面

数据迁移实战

🔧 技术说明:MinIO 提供的命令行工具 mc 功能强大且通用性极佳,不仅支持 MinIO 自身,还兼容所有 S3 协议的对象存储系统。因此,我们选择使用 mc 作为迁移工具,既可以实现 MinIO 到 RustFS 的迁移,也支持在不同 S3 兼容存储之间进行数据同步。

迁移前的准备工作

如果您的 MinIO 实例启用了 HTTPS 且存储了大量数据,建议在迁移期间临时切换到 HTTP 协议。通过 http://127.0.0.1:19000 进行本地传输可以显著提高稳定性和传输速度。

临时关闭 HTTPS 的步骤:

  1. 备份并删除证书目录:/root/.minio/certs
  2. 修改服务端环境变量:MINIO_SERVER_URL=http://127.0.0.1:19000

迁移操作详解

1. 配置存储源

首先需要在 mc 中配置源存储和目标存储的连接信息:

1
2
3
4
5
6
7
# 语法:mc alias set <别名> <服务地址> <访问密钥> <密钥>

# 配置源 MinIO 实例
mc alias set minio http://127.0.0.1:19000 用户名 密码

# 配置目标 RustFS 实例
mc alias set target-s3 http://127.0.0.1:19100 用户名 密码

2. 执行数据迁移

根据实际需求,mc 提供了多种迁移策略:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 场景1:全量迁移(推荐)
# 自动创建不存在的 bucket,跳过已存在的同名文件
mc mirror minio target-s3

# 场景2:迁移特定 bucket
# 注意:目标 bucket 需要提前创建
mc mb target-s3/test # 创建目标 bucket
mc mirror minio/test target-s3/test

# 场景3:强制覆盖模式
# 使用 --overwrite 参数覆盖目标端的同名文件
mc mirror --overwrite minio target-s3
mc mirror --overwrite minio/test target-s3/test

在我们的实际操作中,采用了全量迁移策略

迁移进度截图