RustFS 分布式对象存储

发布时间:2026/6/25 17:42:30
RustFS 分布式对象存储 目录项目概述核心特性架构设计快速部署4.1 二进制单机部署4.2 Docker Compose 部署4.3 Kubernetes 云原生部署基础命令操作S3 兼容开发示例Python Boto3Java SpringBoot集群高可用部署运维监控对比 MinIO / Ceph 优势常见问题 FAQ许可证与社区1. 项目概述RustFS 是基于 Rust 语言开发的高性能分布式对象存储系统完全兼容 AWS S3 标准协议主打私有化部署、低延迟、无GC抖动、商用友好 Apache 2.0 开源协议是 MinIO 国产化替代方案。定位区分不是本地文件系统ext4/xfsRustFS 是上层对象存储服务运行在操作系统文件系统之上对标产品MinIO单机对象存储、Ceph分布式块/对象存储适用场景AI 模型存储、数据湖、文件备份、IoT 边缘存储、政企私有云、混合云多云架构。版本信息当前稳定版v1.0.0-beta.32026-05-14二进制包体积100MB静态编译 musl 无依赖支持架构x86_64 / aarch64(ARM64)系统 Linux/macOS/Windows2. 核心特性完整 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 副本策略支持自定义纠删码NM节省磁盘空间元数据与数据分离存储元数据内存缓存加速查询。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.zipchmodx rustfs# 2. 创建数据目录mkdir-p/data/rustfschmod755/data/rustfs# 3. 环境变量配置可选exportRUSTFS_ADDRESS0.0.0.0:9000exportRUSTFS_CONSOLE_ADDRESS0.0.0.0:9001exportRUSTFS_ACCESS_KEYadminexportRUSTFS_SECRET_KEYSuperStrongPass123!# 4. 启动服务./rustfs /data/rustfs# 默认账号未配置环境变量时# AccessKey: rustfsadmin# SecretKey: rustfsadmin4.2 Docker Compose 单机部署docker-compose.ymlversion:3.8services:rustfs:image:rustfs/rustfs:latestcontainer_name:rustfsrestart:alwaysenvironment:RUSTFS_ADDRESS:0.0.0.0:9000RUSTFS_CONSOLE_ENABLE:trueRUSTFS_CONSOLE_ADDRESS:0.0.0.0:9001RUSTFS_ACCESS_KEY:adminRUSTFS_SECRET_KEY:Admin123456volumes:-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 Admin123456# 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服务ENDPOINThttp://127.0.0.1:9000AKadminSKAdmin123456BUCKETtest-bucket# 初始化S3客户端clientboto3.client(s3,endpoint_urlENDPOINT,aws_access_key_idAK,aws_secret_access_keySK,configConfig(signature_versions3v4))# 1. 创建桶client.create_bucket(BucketBUCKET)# 2. 上传文本对象client.put_object(BucketBUCKET,Keyhello.txt,BodybHello RustFS Object Storage)# 3. 读取对象respclient.get_object(BucketBUCKET,Keyhello.txt)print(resp[Body].read().decode())# 4. 生成临时下载链接urlclient.generate_presigned_url(get_object,Params{Bucket:BUCKET,Key:hello.txt},ExpiresIn600)print(临时访问链接,url)6.2 SpringBoot Java 集成配置文件application.ymlrustfs:endpoint:http://127.0.0.1:9000access-key:adminsecret-key:Admin123456bucket-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;ConfigurationConfigurationProperties(prefixrustfs)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_KEYcluster-adminexportRUSTFS_SECRET_KEYClusterPass2026# 每个节点执行串联所有节点存储目录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/rustfs9. 对比 MinIO / Ceph 优势维度RustFSMinIOCeph开发语言Rust无GCGoGC延迟抖动C开源协议Apache 2.0商用自由AGPLv3开源版商用受限LGPL部署复杂度单二进制极简单二进制极高运维成本重内存延迟稳定无停顿高并发GC抖动稳定资源占用高二进制体积100MB数百MB多组件庞大ARM/国产化优化原生深度优化基础支持适配复杂适用规模TB~PB 私有云/边缘中小规模单机超大规模数据中心10. 常见问题 FAQQ19000端口被占用如何修改端口修改环境变量RUSTFS_ADDRESS0.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.0GitHub 仓库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控制台