把 12TB 生产数据从 MinIO 迁到 RustFS:一次真实迁移的实测

有一支团队在 2026 年 3 月把一个跑了多年的生产对象存储从 MinIO 迁到了 RustFS,数据量 12.4TB、4700 万个对象,单周末切完。他们公开了迁移前后在同一套硬件上的实测数字。我把它拆开看,不是想证明谁赢,而是想弄明白:对一个已经在用 MinIO 的团队,换成 RustFS 到底改了什么、收益落在哪、代价又是什么。结论先放这------写路径和运维开销的改善是真金白银,协议层面几乎零改动。

起点:一套跑得好好的 MinIO 为什么要动

他们从 2020 年就在用 MinIO,单二进制、S3 兼容、CI 产物和 ML 模型仓库都挂在上面。触发迁移的不是它"坏了",而是两件事叠加:一是新业务线要做托管服务、要把对象存储嵌进去,法务对 AGPLv3 的传染性亮了红灯;二是 2026 年 1 月一次批量写入里,Go 的 GC 停顿把 checkpoint 写入的重试逻辑拖超时,作业失败。单看都不是事故,但加在一起,让人重新评估"存储引擎的语言Runtime"这件事。

RustFS 进入视野,是因为它同样单二进制、同样 S3 兼容、Apache 2.0 许可、用 Rust 写没有 GC 停顿。对这支团队来说,迁移的卖点不是"换个牌子",是"同样的运维模型,不同的底层语言,更宽松的许可"。

迁移路径:标准 S3-to-S3,先全量再增量

拓扑是 4 节点 MinIO(纠删码 4+2)迁到 4 节点 RustFS,硬件完全对齐:32 vCPU / 64GB / NVMe,节点间 25Gbps。RustFS 这边用同一套纠删码布局,把节点端点写进同一个 RUSTFS_VOLUMES 就能拉起分布式:

bash 复制代码
export RUSTFS_ACCESS_KEY="rustfstest"
export RUSTFS_SECRET_KEY="a-strong-secret-you-set"
export RUSTFS_VOLUMES="http://rustfs-node{1...4}:9000/data/rustfs{1...4}/mnmd"
export RUSTFS_ADDRESS=":9000"
export RUSTFS_CONSOLE_ENABLE=true
rustfs server /data

数据搬迁走标准 S3 到 S3 的同步。社区里常见的两条路:一条是 rclone 配两个 S3 remote 直接 sync;另一条是 MinIO 的 mc mirror,先 --watch 做全量,再追增量,最后只读窗口切流。一个中性提醒:切换前务必先 mc diff 校验两端对象一致,并保留 MinIO 侧只读副本一段时间作为回滚兜底,不要一刀切。

实测数字:写路径和运维开销改善明显

同一套硬件、同一样本,迁移前后对照(来源:该团队公开的 12TB 迁移报告):

  • PUT 吞吐(4KB 对象) :2.88 MiB/s → 6.1 MiB/s,约 +112%
  • P99 写延迟(4KB) :330 ms → 77 ms,约 −77%
  • 空载常驻内存 :约 300 MB → 约 95 MB,约 −68%
  • 二进制体积 :320 MB → 93 MB,约 −71%
  • 许可证 :AGPLv3 → Apache 2.0,法务那道红线直接消除。

这几个数字的方向很一致:Rust 没有 GC 停顿、内存自管,写密集和小对象场景的延迟与常驻开销都下来了。对一个写多、对象多的 AI 训练/CI 场景,这套收益是实打实能感知的。

读路径我得说句公道话:官方 beta.10 基准里,RustFS 在小对象(1KiB--16KiB)和大于 4MiB 的大对象段已经反超 MinIO,但 100KiB--1MiB 中段 MinIO 暂时还占优,读优化仍在持续进行。所以如果你的负载是"读多写少 + 中段尺寸为主",别只看上面的 PUT 数字,自己用真实样本扫一遍再下结论。

切流与回滚:把风险关进窗口里

他们实际做法是:周五夜里先全量同步,周末业务低峰做只读窗口,把写入切到 RustFS,MinIO 保留只读副本。切完后用 mc diff 跑一致性校验,观察一个业务周期无异常再下线旧集群。整个过程没有"停服大迁移",是渐进式切流。

一个值得记下的边界:MinIO 的 mc、AWS CLI、各语言 SDK 这套工具链在 RustFS 侧基本零改动复用------S3 兼容的真价值在这里才显出来,存量代码不用重写,运维习惯不用重学。

收尾:你也能照做的迁移清单

如果你在评估从 MinIO 迁到 RustFS,按这个顺序来:

  1. 先在等价硬件起一套 RustFS(用上面的 RUSTFS_VOLUMES 展开写法拉起分布式),用 s3-tests 验一遍兼容性,把失败项记下来;
  2. rclonemc mirror --watch 做全量 + 增量同步,期间业务照常跑 MinIO;
  3. 选低峰窗口切只读、校验 mc diff 一致,保留旧集群只读副本做回滚;
  4. warp 对你的典型对象尺寸扫一遍 PUT/GET,存好基线再决定全量切换。

RustFS 把"Rust 写存储、S3 兼容、Apache 2.0"三件事捏到一起,对已经被 AGPL 许可或 GC 停顿卡住的团队,是个低摩擦的替代路线。仓库在这:https://github.com/rustfs/rustfs 。先按上面四步验一遍,比看十篇对比稿都实在。

以下是深入学习 RustFS 的推荐资源:RustFS

官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。

GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。

社区支持: GitHub Discussions- 与开发者交流经验和解决方案。

意见反馈:GitHub Issues

相关推荐
字节跳动的猫1 小时前
LikeShop 和 CRMEB 怎么选?2026 PHP 开源商城横向技术调研
开源
雾里看山1 小时前
大模型是什么:从 GPT 到开源大模型的演进脉络
gpt·开源
程序员老赵1 小时前
Docker 部署 Calibre-Web:轻松搭建网页版电子书管理平台
docker·开源·电子书
亥时科技1 小时前
大疆无人机上云,难的从来不是“飞起来”
开源·无人机·ai巡检
kyokasanagi2 小时前
从零写一个跨 Android/iOS/鸿蒙 的设备标识符 UTS 插件
开源·vuex
CJY6212 小时前
k8s控制器管理
云原生·容器·kubernetes
tedcloud1232 小时前
diagram-design 怎么安装?用 AI 自动生成更专业的架构图、流程图
linux·运维·前端·人工智能·开源·流程图
无念是……2 小时前
K8s 控制器管理详解|RC、RS、Deployment、StatefulSet、DaemonSet、Job&CronJob
云原生·容器·kubernetes·控制器
心仪久了会沦陷3 小时前
数据结构入门系列——顺序表详解:概念、分类与动态实现
c语言·数据结构·经验分享·笔记·开源