RustFS 分布式对象存储
目录
- 项目概述
- 核心特性
- 架构设计
- 快速部署
- 4.1 二进制单机部署
- 4.2 Docker Compose 部署
- 4.3 Kubernetes 云原生部署
- 基础命令操作
- S3 兼容开发示例
- Python Boto3
- Java SpringBoot
- 集群高可用部署
- 运维监控
- 对比 MinIO / Ceph 优势
- 常见问题 FAQ
- 许可证与社区
1. 项目概述
RustFS 是基于 Rust 语言开发的高性能分布式对象存储系统,完全兼容 AWS S3 标准协议,主打私有化部署、低延迟、无GC抖动、商用友好 Apache 2.0 开源协议,是 MinIO 国产化替代方案。
定位区分
- 不是本地文件系统(ext4/xfs):RustFS 是上层对象存储服务,运行在操作系统文件系统之上;
- 对标产品:MinIO(单机对象存储)、Ceph(分布式块/对象存储);
- 适用场景:AI 模型存储、数据湖、文件备份、IoT 边缘存储、政企私有云、混合云多云架构。
版本信息
- 当前稳定版:
v1.0.0-beta.3(2026-05-14) - 二进制包体积:<100MB,静态编译 musl 无依赖
- 支持架构:x86_64 / aarch64(ARM64);系统 Linux/macOS/Windows
2. 核心特性
- 完整 S3 协议兼容
支持桶管理、分片上传、预签名URL、对象生命周期、存储分层(热/温/冷),所有标准 S3 SDK 无需修改代码即可对接。 - Rust 原生性能优势
- 无 GC,不存在内存停顿,P99 延迟稳定 10ms 级;
- 编译期内存安全,杜绝缓冲区溢出、野指针、数据竞争;
- 高并发 IO,多路复用异步 IO,同等硬件吞吐高于 Go 实现的 MinIO。
- 商用友好开源协议
Apache 2.0,允许商用修改、闭源二次开发,无 AGPL 传染限制(MinIO 商业版收费,开源 AGPL 限制大)。 - 分布式高可用架构
去中心化集群,横向扩容,多副本数据容错,支持纠删码,单集群支持百TB~PB级存储。 - 云原生原生适配
内置 Docker 镜像、K8s Operator,支持容器化一键部署,适配 ACK/EKS/Tanzu 等云厂商集群。 - 轻量化易运维
单二进制程序,无中间件依赖;内置 Web 可视化控制台;提供官方rustfs-cli命令行工具。 - 跨平台与国产化适配
原生 ARM64 优化,支持国产鲲鹏、飞腾;适配信创服务器操作系统。
3. 架构设计
分层架构
- 接入层
HTTP S3 API、Web 控制台、rustfs-cli 客户端、负载均衡/Nginx 反向代理。 - 核心服务层
- 认证鉴权:AccessKey/SecretKey、TLS HTTPS、对接 KeyCloak 统一身份;
- 对象管理:桶、元数据、分片上传、预签名链接;
- 分布式调度:节点数据分片、副本、纠删码、扩容均衡;
- 存储层
分层存储:热层 NVMe SSD、温层 HDD、冷层归档/对象归档; - 可观测层
Prometheus 指标、Grafana 看板、日志采集、审计日志、告警通知。
数据存储机制
- 扁平化对象命名空间,无目录层级限制;
- 默认 3 副本策略,支持自定义纠删码(N+M)节省磁盘空间;
- 元数据与数据分离存储,元数据内存缓存加速查询。
4. 快速部署
4.1 Linux 二进制单机部署
# 1. 下载静态二进制 x86_64curl-Ohttps://github.com/rustfs/rustfs/releases/download/1.0.0-beta.3/rustfs-linux-x86_64-musl.zipunziprustfs-linux-x86_64-musl.zipchmod+x rustfs# 2. 创建数据目录mkdir-p/data/rustfschmod755/data/rustfs# 3. 环境变量配置(可选)exportRUSTFS_ADDRESS="0.0.0.0:9000"exportRUSTFS_CONSOLE_ADDRESS="0.0.0.0:9001"exportRUSTFS_ACCESS_KEY="admin"exportRUSTFS_SECRET_KEY="SuperStrongPass123!"# 4. 启动服务./rustfs /data/rustfs# 默认账号(未配置环境变量时)# AccessKey: rustfsadmin# SecretKey: rustfsadmin4.2 Docker Compose 单机部署
docker-compose.yml
version:"3.8"services:rustfs:image:rustfs/rustfs:latestcontainer_name:rustfsrestart:alwaysenvironment:RUSTFS_ADDRESS:"0.0.0.0:9000"RUSTFS_CONSOLE_ENABLE:"true"RUSTFS_CONSOLE_ADDRESS:"0.0.0.0:9001"RUSTFS_ACCESS_KEY:"admin"RUSTFS_SECRET_KEY:"Admin@123456"volumes:-rustfs_data:/data/rustfsports:-"9000:9000"# S3 API端口-"9001:9001"# Web控制台端口volumes:rustfs_data:启动命令:
docker-composeup-d# 查看日志docker-composelogs-frustfs4.3 Kubernetes Operator 部署
官方提供rustfs-operatorCRD,一键创建分布式集群,支持自动扩缩容、存储卷管理、监控组件自动部署,适配私有云 K8s 集群。
5. 基础命令操作
5.1 官方客户端 rustfs-cli
安装:
# Cargo 安装cargoinstallrustfs-cli# Linuxbrewinstallrustfs/tap/rc常用操作:
# 1. 配置服务别名rustfs-clialiassetlocalhttp://127.0.0.1:9000 admin Admin@123456# 2. 创建存储桶rustfs-cli mb local/test-bucket# 3. 本地文件上传rustfs-clicp./demo.txt local/test-bucket/demo.txt# 4. 列出桶内对象rustfs-clilslocal/test-bucket# 5. 下载对象到本地rustfs-clicplocal/test-bucket/demo.txt ./download.txt# 6. 删除对象rustfs-clirmlocal/test-bucket/demo.txt# 7. 生成10分钟临时访问链接rustfs-cli presign local/test-bucket/demo.txt6005.2 Web 控制台
访问http://服务器IP:9001,输入 AccessKey/SecretKey,可视化操作桶、文件、权限、生命周期规则。
6. S3 兼容开发示例
6.1 Python boto3 示例
importboto3frombotocore.configimportConfig# 配置RustFS服务ENDPOINT="http://127.0.0.1:9000"AK="admin"SK="Admin@123456"BUCKET="test-bucket"# 初始化S3客户端client=boto3.client("s3",endpoint_url=ENDPOINT,aws_access_key_id=AK,aws_secret_access_key=SK,config=Config(signature_version="s3v4"))# 1. 创建桶client.create_bucket(Bucket=BUCKET)# 2. 上传文本对象client.put_object(Bucket=BUCKET,Key="hello.txt",Body=b"Hello RustFS Object Storage")# 3. 读取对象resp=client.get_object(Bucket=BUCKET,Key="hello.txt")print(resp["Body"].read().decode())# 4. 生成临时下载链接url=client.generate_presigned_url("get_object",Params={"Bucket":BUCKET,"Key":"hello.txt"},ExpiresIn=600)print("临时访问链接:",url)6.2 SpringBoot Java 集成
配置文件application.yml
rustfs:endpoint:http://127.0.0.1:9000access-key:adminsecret-key:Admin@123456bucket-name:test-bucket配置类
importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.context.annotation.Bean;importsoftware.amazon.awssdk.auth.credentials.StaticCredentialsProvider;importsoftware.amazon.awssdk.regions.Region;importsoftware.amazon.awssdk.services.s3.S3Client;importjava.net.URI;@Configuration@ConfigurationProperties(prefix="rustfs")publicclassRustFSConfig{privateStringendpoint;privateStringaccessKey;privateStringsecretKey;privateStringbucketName;@BeanpublicS3Clients3Client(){returnS3Client.builder().endpointOverride(URI.create(endpoint)).region(Region.CN_NORTH_1).credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey,secretKey))).forcePathStyle(true).build();}// getter/setter}7. 集群高可用部署
4节点最小集群示例
# 环境变量统一密钥exportRUSTFS_ACCESS_KEY=cluster-adminexportRUSTFS_SECRET_KEY=Cluster@Pass2026# 每个节点执行,串联所有节点存储目录rustfs server http://node1:9000/data1,http://node2:9000/data2,http://node3:9000/data3,http://node4:9000/data4集群特性:
- 自动数据分片均衡,新增节点自动迁移数据;
- 支持 2~N 副本,磁盘损坏自动修复副本;
- 无中心元数据节点,单节点故障不影响整体服务。
8. 运维监控
- Prometheus 指标暴露
默认地址http://ip:9000/metrics,包含IO吞吐、请求QPS、延迟分位数、磁盘使用率、副本健康状态。 - Grafana 官方看板
项目仓库提供预制 Dashboard JSON,一键导入查看集群状态。 - 日志审计
记录所有桶增删、文件上传下载、鉴权失败操作日志,支持输出至 ELK。 - TLS 加密
启动参数指定证书开启 HTTPS:./rustfs --tls-path /etc/ssl/certs /data/rustfs
9. 对比 MinIO / Ceph 优势
| 维度 | RustFS | MinIO | Ceph |
|---|---|---|---|
| 开发语言 | Rust(无GC) | Go(GC延迟抖动) | C++ |
| 开源协议 | Apache 2.0(商用自由) | AGPLv3(开源版商用受限) | LGPL |
| 部署复杂度 | 单二进制,极简 | 单二进制 | 极高,运维成本重 |
| 内存延迟 | 稳定无停顿 | 高并发GC抖动 | 稳定,资源占用高 |
| 二进制体积 | <100MB | 数百MB | 多组件庞大 |
| ARM/国产化优化 | 原生深度优化 | 基础支持 | 适配复杂 |
| 适用规模 | TB~PB 私有云/边缘 | 中小规模单机 | 超大规模数据中心 |
10. 常见问题 FAQ
Q1:9000端口被占用,如何修改端口?
修改环境变量RUSTFS_ADDRESS=0.0.0.0:9002,同时同步修改客户端、docker 端口映射。
Q2:原有 MinIO 业务能否无缝迁移 RustFS?
可以,完全兼容 S3 API,无需修改业务代码,仅更换 endpoint、AK/SK。
Q3:单机磁盘损坏,数据是否丢失?
默认3副本策略,单块磁盘损坏数据无损;集群模式多节点冗余,单节点宕机不丢失数据。
Q4:是否支持文件断点续传大文件?
支持 S3 MultipartUpload 分片上传,自动断点续传,支持单文件 TB 级上传。
Q5:如何限制桶访问权限?
Web控制台配置桶策略(私有/公开读/公开读写),支持自定义 JSON 权限策略。
11. 许可证与社区
- 开源协议:Apache License 2.0
- GitHub 仓库:https://github.com/rustfs/rustfs
- 官方文档站:https://docs.rustfs.cn
- 社区支持:Discord、国内技术交流群、企业付费技术支持
- 适用授权场景:企业商用、二次闭源开发、私有化交付、信创项目
附录:启动完整参数列表
./rustfs--help--address: S3 API监听地址 --console-address: Web控制台地址 --tls-path: TLS证书目录,开启HTTPS --access-key: 管理员AK --secret-key: 管理员SK --obs-endpoint: 监控指标上报地址 --console-enable: 是否开启Web控制台