RustFS:一个用 Rust 编写的开源 S3 兼容高性能对象存储系统

10

RustFS 是一个开源、兼容 S3 的高性能对象存储系统,支持迁移和与其他兼容 S3 平台如 MinIO 和 Ceph 的共存。

https://rustfs.com/download/


RustFS 是一个用 Rust 构建的高性能分布式对象存储系统。

入门指南·文档·漏洞报告·讨论

英文 |简体中文|德语|西班牙语|英语|日本|朝鲜语|葡萄牙语|俄语

RustFS 是一款基于 Rust 构建的高性能分布式对象存储系统——Rust 是全球最受欢迎的编程语言之一。RustFS 结合了 MinIO 的简洁性与 Rust 的内存安全性和纯性能。

它为支持的功能提供广泛的 S3 API 兼容性,完全开源,并针对数据湖、人工智能和大数据工作负载进行了优化。

与其他存储系统不同,RustFS 采用允许的 Apache 2.0 许可证发布,避免了 AGPL 的限制。以 Rust 为基础,RustFS 为下一代对象存储提供了更优越的速度和安全分布式功能。

特色与地位

  • 高性能:采用锈蚀建造,以确保最大速度和资源效率。
  • 分布式架构:可扩展且容错设计,适合大规模部署。
  • S3兼容性:与常见的S3兼容应用和工具无缝集成;当前覆盖范围在S3兼容性矩阵.
  • OpenStack Swift API:原生支持Swift协议及Keystone认证。
  • OpenStack Keystone 集成:原生支持OpenStack Keystone认证,支持X-Auth-Token头。
  • 数据湖支持:针对高通量大数据和人工智能工作负载进行了优化。
  • 开源:基于Apache 2.0授权,鼓励社区无限制贡献和商业使用。
  • 用户友好:设计简便,便于部署和管理。

状态说明:✅可用——已发货并由CI门覆盖;🧪预览——以选择加入标志或有限制兼容性声明发货。

特色 现状 特色 现状
S3核心功能 ✅ 可得 分布式模式 ✅ 可得
上传/下载 ✅ 可得 单节点模式 ✅ 可得
版本管理 ✅ 可得 防腐蚀 ✅ 可得
目标锁定(WORM) ✅ 可得 治疗与扫描 ✅ 可得
服务器端加密 ✅ 可得 水池扩建/退役 ✅ 可得
RustFS KMS ✅ 可得 桶复制 ✅ 可得
生命周期管理(ILM) ✅ 可得 站点复制 ✅ 可得
ILM 分级(远程 S3) ✅ 可得 桶配额 ✅ 可得
第三季精选 ✅ 可得 活动通知 ✅ 可得
S3表格(冰山REST) 🧪 预览 审计日志 ✅ 可得
IAM / 政策 ✅ 可得 日志与可观测性 ✅ 可得
OIDC / SSO ✅ 可得 网页控制台 ✅ 可得
基石认证 ✅ 可得 K8s 舵手图 ✅ 可得
Swift API ✅ 可得 FTPS / WebDAV ✅ 可得
多租户 ✅ 可得 SFTP ✅ 可得
MinIO 磁盘兼容性 🧪 预览

注释:

  • RustFS KMS:Vault(KV2 / Transit)和AWS KMS后端支持生产环境。该Local以及Static后端仅用于开发和测试。参见KMS 后端安全属性.
  • Swift API / SFTP:可选加入的货物功能(--features swift,--features sftp,或者full).默认版本中启用了FTPS和WebDAV。
  • S3表格:作为Iceberg REST 目录发布,自动覆盖PyIceberg和DuckDB;其他引擎和供应商配置文件包含有界的主张,列于S3 表格支持矩阵.
  • MinIO 磁盘兼容性:被门禁在rio-v2功能,而非默认构建的一部分。MinIO加密的对象无法被RustFS读取。参见MinIO 文件格式互操作性.

RustFS 与 MinIO 性能

压力测试环境:

类型 参数 备注
中央处理器 2核心 英特尔至强(Sapphire Rapids)铂金8475B,2.7/3.2 GHz
记忆 4GB
网络 15Gbps
驱动 40GB x 4 IOPS 3800 / 硬盘

https://github.com/user-attachments/assets/2e4979b5-260c-4f2c-ac12-c87fd558072a

RustFS 与其他对象存储的区别

特色 RustFS 其他对象存储
主机体验 强力控制台
全面的管理界面。
基础/限量主机
通常过于简单或缺乏关键特征。
语言与安全 基于锈蚀
内存安全是设计上的。
Go 或基于 C
内存GC可能暂停或泄漏。
数据主权 无遥测/完全合规
防止未经授权的跨境数据泄露。符合GDPR(欧盟/英国)、CCPA(美国)和APPI(日本)的标准。
潜在风险
可能涉及法律风险和不想要的数据遥测。
授权 宽松的阿帕奇 2.0
对商业友好,没有“毒丸”条款。
限制性AGPL v3
许可陷阱和知识产权污染的风险。
兼容性 S3兼容核心
适用于常见的S3兼容客户端,覆盖范围在兼容矩阵中跟踪。
变量兼容性
可能缺乏对本地云供应商或特定API的支持。
边缘与物联网 强边缘支撑
非常适合安全、创新的边缘设备。
弱边缘支撑
通常对边缘网关来说太重了。
风险特征 企业风险缓解
知识产权清晰,商业使用安全。
法律风险
知识产权模糊性和使用限制。

保持领先

在GitHub上启用Star RustFS,并能立即收到新版本发布通知。

快速入门

重要

游泳池扩建通知:

  • 单节点单盘(SNSD)部署仅支持作为独立的本地路径。它不能原地扩展或作为池添加。要迁移到多盘拓扑,请创建新部署并通过 S3 迁移数据。
  • 保持现有多驱动器池的端点和擦除集宽度不变;通过附加一个新的池来扩展。基于省略的扩展中,每个池参数必须包含省略表达式,并至少扩展到两个驱动器端点。
  • 允许单节点多驱动器池和每节点一个驱动器的多节点池,前提是必须符合有效的擦除集几何结构和EC设置;接受并不保证主机故障容忍度。

这些拓扑规则遵循 MinIO,但各项目之间的自动奇偶校验选择有所不同。参见池布局兼容性与回归测试然后再扩展部署。

要开始使用 RustFS,请遵循以下步骤:

1. 一键安装(选项1)

curl -O https://rustfs.com/install_rustfs.sh && bash install_rustfs.sh

2. Docker 快速启动(选项 2)

RustFS 容器以非 root 用户身份运行rustfs(UID/GID10001:10001).如果你用 Docker 或 Compose 绑定挂载主机目录,所有挂载路径必须由该用户可写入,否则启动可能会失败并出现权限拒绝错误。

这适用于数据目录、日志目录和 TLS 证书目录,当RUSTFS_TLS_PATH已启用。

# Create data and logs directories
mkdir -p data logs

# Change the owner of these directories
chown -R 10001:10001 data logs

# Using latest version
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest

# Using specific version
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.1

如果你使用,舱体人你可以用以下命令安装 RustFS,代替 docker

# Create data and logs directories
mkdir -p data logs

# Run the container (podman will automatically set the folders ownership)
podman run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data:Z,U -v $(pwd)/logs:/logs:Z,U rustfs/rustfs:latest

如果你在绑定挂载的证书目录中启用TLS,则该挂载过程也要以相同方式准备:

mkdir -p certs
chown -R 10001:10001 certs

你也可以使用 Docker Compose。使用docker-compose-simple.yml根目录中的文件:

docker compose -f docker-compose-simple.yml up -d

在运行带有主机绑定挂载的 Compose 之前:

  • 确保每条挂载的主机路径都可以写入10001:10001.
  • 如果你启用了TLS,确保证书挂载为/opt/tls也可由 读取10001:10001.
  • 如果匹配主机所有权不可行,可以运行rustfs服役user: ":"反而。
  • docker-compose-simple.yml包括一个volume-permission-helper命名卷的服务。docker-compose-simple.yml依赖你提前准备绑定的主机路径。

同样,你也可以用 podman 执行命令

podman compose -f docker-compose-simple.yml up -d

Webhook 通知快速启动(Docker ):

docker run -d --name rustfs -p 9000:9000 \
  -e RUSTFS_NOTIFY_ENABLE=true \
  -e RUSTFS_NOTIFY_WEBHOOK_ENABLE_PRIMARY=on \
  -e RUSTFS_NOTIFY_WEBHOOK_ENDPOINT_PRIMARY=http://:3020/webhook \
  -e RUSTFS_NOTIFY_WEBHOOK_QUEUE_DIR_PRIMARY=/tmp/rustfs-events \
  -e RUSTFS_OUTBOUND_ALLOW_ORIGINS=http://:3020 \
  rustfs/rustfs:latest

注释:

  • RUSTFS_NOTIFY_ENABLE=true启用全局通知模块开关。
  • 对于ARNarn:rustfs:sqs::primary:webhook, 使用实例范围的环境变量,满足_PRIMARY.
  • 如果省略了队列dir,默认为/opt/rustfs/events;确保容器运行时用户可写入。
  • RUSTFS_NOTIFY_WEBHOOK_SKIP_TLS_VERIFY_PRIMARY默认为false;启用 IT 会跳过 webhook TLS 证书验证,允许中间人攻击,并发出启动警告。偏好RUSTFS_NOTIFY_WEBHOOK_CLIENT_CA_PRIMARY对于私人CA来说。
  • 因为1.0.0-beta.11、私有或容器网络上的Webhook端点(Docker Compose service names,host.docker.internal,RFC 1918地址)除非其精确地址,否则被阻挡scheme://host:port起源记载于RUSTFS_OUTBOUND_ALLOW_ORIGINS(仅指原点,不含路径)。参见出站连接政策.

注释:我们建议复习docker-compose.yml文件运行前。它定义了多个服务,包括 Grafana、Prometheus 和 Jaeger,这些服务对 RustFS 的可观察性很有帮助。

如果你想启动 Redis 或 Nginx 容器,可以指定相应的配置文件。

3. 从源代码构建(选项3)- 高级用户

对于希望从源代码构建支持多架构的 RustFS Docker 镜像的开发者:

# Build multi-architecture images locally
./docker-buildx.sh

# Build a single-platform image locally
./docker-buildx.sh -p linux/amd64

# Build and push to registry
./docker-buildx.sh --push

# Build specific version
./docker-buildx.sh --release v1.0.0 --push

# Build for custom registry
./docker-buildx.sh --registry your-registry.com --namespace yourname --push

该docker-buildx.sh脚本支持:

  • 多架构构建:linux/amd64,linux/arm64
  • 自动版本检测:使用 git 标签或提交哈希
  • 登记处灵活性支持Docker Hub、GitHub容器注册表等。
  • 构建优化:包含缓存和并行构建

你也可以使用“制作目标”以方便使用:

make docker-buildx                    # Build locally
make docker-buildx-push               # Build and push
make docker-buildx-version VERSION=v1.0.0  # Build specific version
make help-docker                      # Show all Docker-related commands
抬头(macOS交叉编译):macOS保留默认ulimit -n第256页,所以cargo zigbuild或./build-rustfs.sh --platform ...可能失败于ProcessFdQuotaExceeded当针对Linux时。构建脚本会尝试自动提高限制,但如果仍然看到警告,请执行ulimit -n 4096(或更高)在你的壳里再建造。

4. 使用Helm Chart构建(选项4)- 云原生

按照舵手图 README在Kubernetes集群上安装RustFS。

关于扫描器节奏、周期预算、位元衰变节奏、生命周期转换状态以及单节点单磁盘空闲CPU调优,请参见扫描仪运行控制.关于可重复的扫描仪压力验证,请参见扫描基准测试运行手册.对于慢速存储的驾驶超时旋钮——包括管理步行隔间预算的控制ListObjects关于大前缀——参见驾驶超时调优.

5. 尼克斯剥片(选项5)

如果你有启用片状时 Nix:

# Run directly without installing
nix run github:rustfs/rustfs

# Build the binary
nix build github:rustfs/rustfs
./result/bin/rustfs --help

# Or from a local checkout
nix build
nix run

该片还导出了一个 NixOS 模块和 RustFSrc客户端。将模块添加到你的系统,并通过运行时文件(例如sops-nix或agenix)提供凭证,确保秘密永远不会存储在Nix存储中:

imports = [ inputs.rustfs.nixosModules.rustfs ];

services.rustfs = {
  enable = true;
  accessKeyFile = "/run/secrets/rustfs-access-key";
  secretKeyFile = "/run/secrets/rustfs-secret-key";
  volumes = [ "/var/lib/rustfs" ];
};

安装兼容S3的客户端nix profile install github:rustfs/rustfs#rustfs-client(可执行文件名为rc),或使用inputs.rustfs.packages.${pkgs.system}.rustfs-client在系统配置中。

6. X-CMD(选项6)

如果你是x-cmd用户:

# Run directly without installing
x rustfs

# Download the binary and install it to the global environment
x env use rustfs
rustfs --help

访问 RustFS

  1. 访问控制台打开你的浏览器,导航到http://localhost:9001访问RustFS控制台。
    • 默认凭证:rustfsadmin/rustfsadmin
  2. 创建桶:使用控制台为你的对象创建一个新的桶。
  3. 上传对象: 你可以直接通过控制台上传文件,或使用兼容 S3 的 API/客户端与你的 RustFS 实例交互。

注释: 通过以下方式访问 RustFS 实例https,请参考TLS 配置文档.

OIDC 角色声明 (Microsoft Entra ID)

RustFS 支持将包含角色值的 OIDC 声明映射到现有授权流水线中。该roles_claim设定为可选:当未集合或空时,只有groupsclaim 对授权有贡献(与旧版 RustFS 版本相同)。

对于 Microsoft Entra ID 应用角色,设置roles_claim=roles所以无论是控制台管理员检查还是桶IAM策略都可以评估这些角色。

示例环境配置(自愿角色声明):

RUSTFS_IDENTITY_OPENID_ENABLE=on
RUSTFS_IDENTITY_OPENID_CONFIG_URL="https://login.microsoftonline.com//v2.0/.well-known/openid-configuration"
RUSTFS_IDENTITY_OPENID_CLIENT_ID=""
RUSTFS_IDENTITY_OPENID_CLIENT_SECRET=""
RUSTFS_IDENTITY_OPENID_SCOPES="openid,profile,email"
RUSTFS_IDENTITY_OPENID_GROUPS_CLAIM="groups"
RUSTFS_IDENTITY_OPENID_ROLES_CLAIM="roles"

策略条件示例(直接评估应用角色,使用jwt:roles;当roles_claimRustFS也将这些值合并为jwt:groups为了向后兼容旧政策):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["admin:*"],
      "Resource": ["arn:aws:s3:::*"],
      "Condition": {
        "ForAnyValue:StringEquals": {
          "jwt:roles": ["RustFS.ConsoleAdmin"]
        }
      }
    }
  ]
}

文献资料

如需详细文档,包括配置选项、API参考和高级使用,请访问我们的网站文献资料.

寻求帮助

如果您有任何问题或需要帮助:

  • 检查一下常见问题关于常见问题和解决方案。
  • 加入我们的GitHub 讨论提问并分享你的经历。
  • 在我们的网站上提出问题GitHub 问题用于报告错误或功能请求的页面。

链接

联系方式

撰稿人

RustFS 是一个社区驱动的项目,我们非常感谢所有的贡献。请查看撰稿人页面上可以看到那些帮助让RustFS变得更好的了不起的人。

星级历史

许可

Apache 2.0

RustFS是RustFS, Inc.的商标。所有其他商标均归其各自所有者所有。

参与讨论