对标 MinIO!全新一代分布式文件系统正式发布

大半年前,我写文章分享过 RustFS 这个开源对象存储项目:对标MinIO!全新一代分布式文件系统诞生

这篇文章让 RustFS 当天就涨了上千 Star,甚至惊动了官方。

时隔大半年,RustFS 正式版已经发布,迎来 GA(General Availability,正式可用)阶段。今天给大家同步一下这个消息,尤其是正在用 MinIO、准备自建对象存储的同学,可以重新看看它了。

这大半年里,RustFS 的关注度也涨了不少。项目在 2025 年 7 月开源,2026 年 7 月就突破了 30,000 Star 。开源一年达到这个量级,放在全球开源对象存储项目里,已经相当亮眼。截至发文,GitHub 上约有 32K Star

我个人更关心的是,这次正式发布之后,RustFS 能不能成为已有业务接得上、后续也维护得下去的 MinIO 替代方案。

RustFS 是用 Rust 编写的开源分布式对象存储,兼容 S3 API,采用 Apache-2.0 许可证。 图片、简历、业务附件、导出报表等文件,都可以交给它管理;原来使用 S3 协议的应用,也能继续沿用熟悉的客户端和 SDK。

替代 MinIO,已有业务怎么接入

我自己的 AI 面试项目就用的是 RustFS,用来存放简历和知识库原文件,系统架构图如下。

后端使用 AWS S3 SDK 接入,数据库保存文件对应的存储键,原文件交给 RustFS 管理。

打开 interview-guide 这个桶,能看到 resumes/knowledgebases/ 两个前缀。项目里的 FileStorageService 把两类上传分开保存,对象键还会带上日期和随机标识,便于组织文件并降低重名概率。

接入代码创建的是 AWS SDK 的 S3Client,用 endpointOverride 指向 RustFS,按"服务地址 / 桶名 / 对象键"的路径方式访问。上传调用 putObject,下载调用 getObjectAsBytes,业务代码里不需要再引入一套 RustFS 专用上传接口。

对于使用标准 S3 接口的常规文件业务,替换 MinIO 时,可以保留原有 SDK 和主要业务逻辑,把改造集中在连接配置与数据迁移上。

除了普通上传下载,分段上传、预签名 GET / PUT URL 等操作,也在官方列出的支持范围内。

比如一个已经使用 AWS S3 SDK 的 Java 项目,迁移完成后,将 Endpoint 指向 RustFS,配好访问凭证、桶名和权限,就能按原来的调用方式访问文件。若项目调用了 MinIO 专用管理接口,或者依赖特定 S3 行为,则要对照官方兼容性矩阵逐项确认。

存量数据也有对应的迁移路径。官方磁盘格式兼容说明列出了对 MinIO 未加密对象、桶元数据和 IAM 配置的读取或导入支持,符合条件的部署可以复用已有数据。这项能力目前仍标为预览,加密对象还取决于原来的密钥管理方案和 RustFS 构建方式。

数据量大、不想等全量复制结束再接入新服务,还可以看 RustFS 的按需迁移功能。它把 MinIO 的源桶关联到 RustFS:应用向 RustFS 读取文件,本地还没有,就从 MinIO 取回并返回给应用,同时按对象大小走本地写入或后台回填;本地副本写入成功后,后续读取就由 RustFS 承担。没有被访问到的对象,则可以通过后台回填任务迁移。

这让切换可以分步完成,不必把全部历史文件搬完,才开始接入 RustFS。迁移期间要将写入统一切到 RustFS,因为已经拉取的对象不会继续跟踪源端更新;依赖完整文件列表时,还要开启 ListObjectsV2 的源端合并。历史版本和 SSE-C 加密对象需要另外安排迁移方式。

沿用 S3 接口,再配合数据迁移,RustFS 就能承接原来由 MinIO 负责的常规文件存储业务。 我的选择会是先用有代表性的文件验证读写、权限和恢复,再按数据规模选择直接导入或按需迁移。

GA 正式发布,开始面向生产使用

此前一直等正式版的同学,现在可以开始安排生产部署了。GA 标志着 RustFS 从预发布迭代进入正式可用阶段,自建对象存储多了一个可以用于生产的开源选择。

存储系统能让人放心,靠的是日常管理和出问题后的处理都有办法:文件覆盖错了能找回,磁盘故障有冗余保护,容量不够还能继续扩。RustFS 已经围绕这些需求提供了版本控制、对象锁定、纠删码和存储池管理等能力。

拿附件存储来说,用户更新了 report.pdf,过一会儿又说传错了,想找回昨天那份。这时就用得上存储桶版本控制。

创建桶时可以开启"版本"(Version),已有桶也可以在 Settings 的 Data Protection 中调整 Versioning。

开启后,向同一个对象键上传新内容,会生成新的版本 ID。按官方文档里的恢复流程,进入对象详情的版本列表(中文版入口显示为"版本数"),找到需要的旧版本,下载后重新上传,就能把那份内容恢复成最新版本。

普通删除也会改变行为:不指定版本 ID 的删除会产生删除标记,旧版本仍然保留。业务侧读取这个对象时可能显示不存在,但管理员还能按版本 ID 找回此前的数据。

上线前,我会把同名覆盖和误删恢复放进验收流程,确认历史文件确实能按业务要求找回。

保留旧版本会多占空间。临时报表、历史附件等数据可以配合生命周期规则处理,比如为 logs/ 前缀下的对象设置 30 天过期。规则由后台扫描器异步执行,达到期限后不会立即处理完所有对象;旧版本也需要单独规划保留时间。

服务端加密、对象锁定、桶复制等功能也已经列入官方可用功能表。对象锁定适合需要限制版本删除的场景;桶复制要求源桶和目标桶开启版本控制。准备使用这些能力时,要把保留策略和恢复流程一起安排好。

数据多起来,容量和故障怎么处理

RustFS 的分布式存储使用 Reed-Solomon 纠删码,将对象拆成数据块和校验块,分布保存。

容量不够时,RustFS 支持通过增加存储池扩展集群,控制台可以查看各存储池的使用情况。

扩容需要在各节点的 RUSTFS_VOLUMES 中追加新存储池配置,保留已有存储池及其顺序,再按文档重启服务、检查节点和磁盘状态。这一步需要安排维护窗口,控制台里的存储池页面主要用来查看和核对结果。

新增容量可以承接后续写入,已有对象仍留在原来的存储池里。希望旧数据也分布到新池,需要再执行数据再均衡。

准备长期自建存储,我会把这些运维能力和 S3 接口一起看。生产部署要按业务要求选择冗余配置,配好监控、备份与恢复流程,再用自己的读写负载完成上线验收。有了正式版和这些管理能力,团队就可以据此制定采用计划。

用自己的文件业务试起来

体验不需要先搭分布式集群。Linux 上准备好 Docker Engine 20.10 或更新版本,macOS 或 Windows 可以使用能运行 Linux 容器的 Docker Desktop。

这里我们以 Docker 单节点方式,端口只绑定本机,进行演示。

下面的命令会拉取官方镜像、创建一个名为 rustfs-demo-data 的数据卷,并启动测试容器。运行前,把两处凭证换成自己的测试凭证,不要填写生产环境密钥;9000 和 9001 端口需要空闲。

ini 复制代码
docker volume create rustfs-demo-data

docker run -d \
  --name rustfs-demo \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v rustfs-demo-data:/data \
  -e RUSTFS_ACCESS_KEY='replace-with-your-test-access-key' \
  -e RUSTFS_SECRET_KEY='replace-with-your-test-secret-key' \
  -e RUSTFS_CONSOLE_ENABLE=true \
  rustfs/rustfs:latest /data

latest 用来快速体验;生产部署应固定为经过业务验收的 GA 发布标签。这个示例使用单个数据卷,不具备多节点部署的故障容忍能力。

启动后执行健康检查:

arduino 复制代码
curl --fail http://127.0.0.1:9000/health

健康检查通过后,在浏览器打开 http://localhost:9001/rustfs/console/,使用刚才配置的凭证登录。S3 客户端连接的是 http://localhost:9000,这两个端口用途不同。

可以用一个测试桶完成这组操作:

  1. 创建 rustfs-demo 桶,开启版本控制。
  2. 上传一个文本文件,修改内容后,以同一个对象键再次上传。
  3. 在对象详情的"版本数"中检查两个版本,分别下载并核对内容。
  4. 普通删除当前对象,再查看删除标记和旧版本,尝试恢复。

遇到启动问题,用 docker logs rustfs-demo 查看日志。若把命名卷改成主机目录挂载,要按官方文档处理容器用户 10001:10001 的读写权限。

体验结束后,可以运行 docker stop rustfs-demo 停止服务。数据仍保留在命名卷里,后续用 docker start rustfs-demo 继续验证。

如果你正在为新项目选对象存储,或者已有 MinIO 业务、想换一套开源方案,我建议优先看看 RustFS。新项目可以从附件上传下载开始接入;已有系统则按自己的接口、数据和权限安排迁移。先完成一条真实的文件上传、下载和恢复流程,再决定切换范围。

项目地址:github.com/rustfs/rust...

⭐️推荐阅读:

相关推荐
风骏时光牛马1 小时前
AI驱动自动化业务工作流搭建实践
前端
码云之上2 小时前
Skill 里的脚本终于能跑了,星悟接 CubeSandbox 的纪实
前端·人工智能·前端框架
用户8356290780512 小时前
使用 Python 将 DOCX 转换为 Markdown
后端·python
IT_陈寒2 小时前
Vue computed属性这个坑,我居然踩了三次才爬出来
前端·人工智能·后端
烈风逍遥2 小时前
第三篇:组件化实践,SpTable 通用表格组件设计
前端·架构
计算机魔术师2 小时前
三周时间,128个PR,83万行代码——GitHub 是怎么让 AI 重写自己的
前端
孙启超3 小时前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
甲维斯3 小时前
完蛋了,豆包变这么强?Seed2.1pro小测一下!
前端·人工智能