分布式对象存储——RustFS

1、简介

对象存储已经成为现代应用存储架构的重要组成部分。无论是云原生应用、数据湖、AI 训练数据集,还是企业备份归档场景,对象存储都凭借高扩展性、低成本和易管理的优势占据主导地位。

最近,一款基于 Rust 语言开发的高性能分布式对象存储软件 —— RustFS,开源不到一个月就收获了 6k+ Star,吸引了大量开发者关注。它不仅兼容 AWS S3 协议,而且自带功能丰富的可视化管理控制台,在易用性和体验上甚至超越了 MinIO。

2、特点

RustFS 是一款面向大规模数据存储的开源对象存储系统,采用 Apache 2.0 开源协议,具有以下主要特性:

高性能基于 Rust 构建,充分利用其内存安全和高并发特性,响应速度极快。

分布式架构可扩展且具备容错能力,适用于海量数据存储与高可用部署。

AWS S3 兼容性支持标准 S3 API,可直接使用 AWS SDK、s3cmd、MinIO Client 等工具。

数据湖支持针对大数据和 AI 场景进行优化,适配数据分析和训练任务。

可视化管理控制台内置 Web UI,支持存储桶、用户、密钥、策略、性能监控等可视化管理。

开源与社区采用 Apache 2.0 协议,鼓励社区贡献与二次开发。

3、使用场景

云原生存储:Kubernetes、微服务应用的数据存储方案

企业私有云:内部文件、文档、、视频等统一存储管理

大数据与 AI:作为数据湖,存放训练数据集和分析数据

备份与归档:长期文件存储与灾备中心建设

静态资源托管:网站、视频、应用安装包等的分发存储

4、架构

作为 MinIO 的开源平替,RustFS 参考了 MinIO 的简洁、轻量、可扩展、优雅的架构。RustFS 的基本架构是分布式网格,一种使用多个节点执行单个任务的计算机架构。摒弃了传统分布式存储中复杂的主节点、元数据节点、数据节点角色划分,节点通过网络相互连接,这使得它们能够相互通信。

img

整体观

对外:应用通过 S3 API 访问集群,任意节点都能接收请求(建议前置一个负载均衡)。

对内:每个节点结构对称,都包含 S3 前端 → Object Layer → Storage Layer 三层;节点之间通过 Internal RESTful API 协同,并用分布式锁保证并发场景下的一致性。

1) S3 前端(Object API)

职责:认证(AK/SK)、签名校验、桶与对象的增删改查、分片上传、预签名 URL 等。

特点:S3 兼容,应用可直接用 AWS SDK;生产建议开启 path-style 访问并在 LB 上做健康检查/超时重试。

2) Object Layer(对象层)

图里蓝色大方块内的四个“能力插件”,围绕对象读写做数据面增强:

Cache(缓存)

对热点对象/元数据做就近缓存,降低 I/O 与网络时延。

常见做法是内存 +(可选)本地盘二级缓存。

Compression(压缩)

按对象或分片进行透明压缩,节省存储、提升跨节点传输效率。

是否启用通常可按桶/对象策略控制。

Encryption(加密)

传输层 TLS;存储层服务端加密(SSE)以对象为粒度落盘。

密钥来源可内置或对接 KMS(具体以发行版实现为准)。

Erasure Code / Bitrot(纠删码 / 位腐蚀校验)

将对象切成 数据分片 + 校验分片(k+m) 存到不同磁盘/节点,允许多盘/节点故障仍可读。

Bitrot 通过校验和发现数据腐蚀,后台自动修复(heal)。

分布式锁:位于对象层底部,跨节点对关键操作(如同名写入、分片合并、删除、生命周期任务)做互斥,避免并发写“打架”。
3) Storage Layer(存储层)

职责:面向对象层提供统一的存取接口(Storage API),屏蔽底层多卷细节。

落盘:每个节点挂载多块盘/卷(图中 /mnt/volume{1..n}),右侧 JBOD/F 表示“Just a Bunch Of Disks + Filesystem”(常见 XFS/EXT4 等)。

数据放置:对象被切片/编码后分布在同节点的多卷以及其他节点上,提升并行吞吐与故障域隔离。

4) 节点间协同(Internal RESTful API)

内容:集群成员发现、健康状态、重平衡/修复协调、分布式锁/事务性元操作等。

效果:任何节点都能服务读写;当本地缺分片时,从同组其它节点拉取并重构。

5) 数据流(按一次 PUT / GET 拆解)

PUT(写入)

客户端通过 S3 PUT 命中某节点;

对象层进行缓存/压缩/加密(按策略);

执行纠删码切片(k+m),获取分布式锁;

分片并行落到本机多卷 + 其他节点;达到写入法定数量(quorum)即返回成功;

后台异步做校验、补齐/修复与统计。

GET(读取)

客户端 GET 打到任意节点;

命中缓存则直读;未命中则根据元信息定位分片;

本地读 + 跨节点拉取,必要时用纠删码重构;

按需解密/解压并返回给客户端,同时更新缓存。

6) 可用性与扩展性

故障容忍:由纠删码的 m 决定,可承受多盘/多节点同时故障(上限取决于分片布局)。

自愈:发现 bitrot 或缺失分片后,后台从剩余分片重建。

横向扩展:新增节点/磁盘即可提升容量与并发;新写入会利用新资源,是否触发历史数据重平衡视实现与策略而定。

运维建议:

前置 负载均衡(Nginx/HAProxy/SLB),就近路由 + 重试;

时间同步(NTP)保持一致;

磁盘独立分卷挂载,避免单盘多分区争用;

指标/日志接入你的监控链路(如 Prometheus + Grafana、EFK)。

7) 与 MinIO 的“神似点”

都是 S3 兼容 + 对称节点 + 纠删码 + 自愈 的分布式对象存储范式;

RustFS 在图示上强调了对象层能力插件化(缓存/压缩/加密)与内置分布式锁,控制台也更“重 UI 管理”。

5、Docker 部署 RustFS

RustFS 支持二进制、源码以及容器化部署,最简单的方式是使用 Docker。

root@huqi-virtual-machine:~/RustFS# cat docker-compose.yaml
services:
rustfs:
image: registry.cn-shanghai.aliyuncs.com/study-03/rustfs:latest
container_name: rustfs
ports:
– “9000:9000”
volumes:
– ./data:/data # 数据存储
environment:
– RUSTFS_ROOT_USER=rustfsadmin
– RUSTFS_ROOT_PASSWORD=rustfsadmin
restart: unless-stopped
参数说明:

RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY:访问密钥

data:数据存储路径

9000:服务访问端口

6、登录控制台

启动成功后,浏览器访问:

用户名:rustfsadmin
密码:rustfsadmin

7、RustFS 控制台体验

RustFS 提供了功能丰富的可视化管理控制台,常用功能包括:

文件浏览器:创建存储桶、上传/下载文件、设置访问策略

访问密钥管理:生成临时密钥、设置过期时间和权限

用户管理:新增用户并分配访问策略

性能监控:查看节点性能指标

示例操作:

点击右上角 创建存储桶

在存储桶列表点击配置按钮,修改访问策略(如公开只读)

进入存储桶上传文件,支持多文件批量上传

点击文件可直接预览(、文本等)

8、接口测试

由于项目集成了 Swagger,我们可以直接在 http://192.168.28.137:9000 进行调试:

上传文件接口:选择文件后提交,返回文件 URL

删除文件接口:传入 objectName 即可删除

上传成功的文件可直接通过返回的 URL 访问(因策略设置为公开只读)。

声明:来自IT运维大爆炸,仅代表创作者观点。链接:https://eyangzhen.com/2310.html

IT运维大爆炸的头像IT运维大爆炸

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部