单节点单磁盘模式 (SNSD, Single Node Single Disk)
1. 安装前阅读
本篇文档包含 RustFS 单节点单磁盘部署模式。
请阐明您的三种安装启动模式
安装前检查,确保所有指标都满足生产指导特性。如果不需要生产标准,则可以跳过此指导;
单节点单磁盘适合低密度非关键业务,生产环境下建议有数据备份经验,避免数据风险。
1 台服务器只有一块数据盘,所有数据都落入这一块数据盘。
具体架构图如下

2. 前提条件
- 操作系统版本;
- 防火墙;
- 内存条件;
- 时间同步;
- 容量规划;
- 磁盘规划;
- 文件系统选择;
2.1. 操作系统版本
我们建议使用 Linux 内核版本 4.x 及以上。因为 5.x/6.x 版本可以获得更好的 IO 吞吐能力和网络性能。
您可以使用 Ubuntu 22.04 和 RHEL8.x 来安装 RustFS。
2.2 防火墙
Linux 系统默认是开启防火墙的。您可以使用以下命令检查防火墙状态
systemctl status firewalld如果您的防火墙状态为 "active",则可以使用以下命令关闭防火墙
systemctl stop firewalld
systemctl disable firewalld或者允许 RustFS 端口 9000
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload部署中的所有 RustFS 服务器必须使用相同的监听端口。如果您使用 9000 端口,其他服务器上的所有端口也需要是 9000 端口。
2.3 内存条件
RustFS 至少需要 2 GB 内存才能运行测试环境,生产环境需要最低 128 GB 内存。
2.4 时间同步
多节点一致性必须使用时间服务器来维护时间一致性,否则可能出现服务无法启动的情况。相关时间服务器如使用 ntp, timedatectl, 或 timesyncd。
RustFS 需要时间同步。您可以使用以下命令检查时间同步状态
timedatectl status如果状态为 "synchronized",则表示时间同步正常。
2.5 容量与 EC 规划
在规划对象存储容量时,我们建议您基于以下几点进行
- 初始数据量:您计划一次性迁移或存储多少数据?(例如:500 TB)
- 数据增长量:每日/每周/每月的数据增长容量;
- 规划周期:您希望本次硬件规划能够支撑多久?(建议:3 年)
- 考虑您公司的硬件迭代和更新周期。
EC (Erasure Coding) 规划如下
| 场景 | 推荐校验级别 | 描述 |
|---|---|---|
| 标准生产环境 | EC:4 | 能够容忍最多 4 个磁盘(或节点)故障,在可靠性和存储效率之间取得良好平衡。 |
| 高可用性需求 | EC:4 - 8 | 或更高,适用于对数据可用性要求极高的场景,但会牺牲更多存储空间。 |
| 开发测试环境 | EC:2 | 提供基本的冗余保护,适用于非关键业务。 |
2.6 磁盘规划
由于 NFS 在高 IO 情况下会产生幻写和锁问题,禁止使用 NFS 作为 RustFS 的底层存储介质。官方强烈建议使用 JBOD(Just a Bunch of Disks)模式,即简单磁盘捆绑。这意味着将物理磁盘直接、独立地暴露给操作系统,由 RustFS 软件层负责数据冗余和保护。
原因如下
- 性能更优:RustFS 的纠删码引擎经过高度优化,能够直接并发读写多个磁盘,实现比硬件 RAID 控制器更高的吞吐量。硬件 RAID 反而成为性能瓶颈。
- 成本更低:无需昂贵的 RAID 卡,降低硬件采购成本。
- 管理更简单:RustFS 统一管理磁盘,简化存储层操作。
- 故障恢复更快:RustFS 的数据修复(healing)过程比传统 RAID 重建更快,对集群性能影响更小。
官方建议在磁盘上采用 NVMe SSD 作为存储介质,确保更高的性能和吞吐能力。
2.7 文件系统选择
对于磁盘文件系统格式化,RustFS 官方强烈建议所有用于存储的磁盘都使用 XFS 文件系统。RustFS 的开发和测试均基于 XFS,以确保最佳性能和稳定性。不建议使用 ext4、BTRFS 或 ZFS 等其他文件系统,因为它们可能导致性能下降或出现不可预测的问题。
RustFS 是一个为高并发和高性能而设计的对象存储系统。当客户端上传或下载大对象时,RustFS 会将其分片,并在纠删集(Erasure Set)中的多个磁盘上并行读写。
XFS 优势:XFS(eXtents File System)从一开始就被设计用于高性能和可扩展性。它在大文件处理和高并发 I/O 场景下表现出色。其内部的日志和数据结构(例如 B+ 树)能够高效处理大量的并行读写请求,这与 RustFS 的工作模式完美匹配。相比之下,尽管 ext4 等文件系统近年来在性能上有了很大改进,但在面对极端并发负载时,XFS 通常能提供更稳定和卓越的吞吐量。
对象存储通常需要处理海量文件和巨大的单个文件(TB 级别)。XFS 是一种 64 位文件系统,可以支持极大的文件大小(高达 8 EB)和文件系统规模。它的元数据管理效率非常高,即使在单个目录下存储数百万个文件时,其性能下降也远小于其他文件系统。这对于 RustFS 将每个对象(或对象的版本)作为独立文件存储在后端文件系统上的方式至关重要。
当 RustFS 写入新的对象或对象版本时,为了确保写入性能并减少文件碎片,它会执行空间预留。XFS 提供了一个高效的 API,称为 fallocate,允许应用程序预留一个连续的磁盘空间块。RustFS 利用这一特性,在写入文件之前就为文件分配所需的空间,从而避免了写入过程中动态扩展和元数据更新带来的性能开销,同时最大限度地减少了文件碎片,确保了后续的读取性能。
为了更好地进行磁盘发现,在格式化 xfs 文件系统时,我们推荐采用 Label 标签对磁盘进行标记。
首先,您需要检查磁盘系统情况
sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.7G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 465.2G 0 part /
nvme0n1 8:16 0 3.7T 0 disk <-- if this is our format new disk
nvme1n1 8:32 0 3.7T 0 disk <-- if this is our format new disk
nvme2n1 8:48 0 3.7T 0 disk具体格式化命令如下
sudo mkfs.xfs -i size=512 -n ftype=1 -L RUSTFS0 /dev/sdb我们可以在格式化时添加一些推荐的选项来优化性能
- -L
- -i size=512:RustFS 官方推荐将 inode 大小设置为 512 字节,这对于存储大量小对象(元数据)的场景具有性能优势。
- -n ftype=1:启用 ftype 功能。这允许文件系统在目录结构中记录文件类型,从而提高 readdir 和 unlink 等操作的性能,对 RustFS 非常有利。
挂载
# write new line
vim /etc/fstab
LABEL=RUSTFS0 /data/rustfs0 xfs defaults,noatime,nodiratime 0 0
#save & exit
# mount disk
sudo mount -a3. 配置用户名
RustFS 在启动时,我们建议您配置一个无登录权限的专用用户来启动 RustFS 服务。在 rustfs.service 启动控制脚本中。
- 不要修改默认启动账户:默认用户和组均为
root和root。如果您想使用默认root和root,则无需进行任何修改。 - 修改默认启动账户:您可以使用 groupadd 和 useradd 命令创建用户和组,然后在 systemctl 启动配置文件中修改用户名和密码。
以下示例展示了创建用户、组,并设置访问 RustFS 指定数据目录的权限(可选)
groupadd -r rustfs-user
useradd -M -r -g rustfs-user rustfs-user
chown rustfs-user:rustfs-user /data/rustfs*注意
- 如果创建 rustfs-user 用户和组,需要将
/etc/systemd/system/rustfs.service中的 User 和 Group 修改为rustfs-user; - 将
/data/rustfs*调整为指定的挂载目录。
4. 下载安装包
请您先安装 wget 或 curl 来下载 rustfs 安装包。
# Download address
wget https://dl.rustfs.com/artifacts/rustfs/release/rustfs-linux-x86_64-musl-latest.zip
unzip rustfs-linux-x86_64-musl-latest.zip
chmod +x rustfs
mv rustfs /usr/local/bin/5. 配置环境变量
- 创建配置文件
# Single node single disk mode
sudo tee /etc/default/rustfs <<EOF
RUSTFS_ACCESS_KEY=rustfsadmin
RUSTFS_SECRET_KEY=rustfsadmin
RUSTFS_VOLUMES="/data/rustfs0"
RUSTFS_ADDRESS=":9000"
RUSTFS_CONSOLE_ENABLE=true
RUST_LOG=error
RUSTFS_OBS_LOG_DIRECTORY="/var/logs/rustfs/"
EOF- 创建存储目录
sudo mkdir -p /data/rustfs0 /var/logs/rustfs /opt/tls
sudo chmod -R 750 /data/rustfs* /var/logs/rustfs6. 配置系统服务
- 创建 systemd 服务文件
sudo tee /etc/systemd/system/rustfs.service <<EOF
[Unit]
Description=RustFS Object Storage Server
Documentation=https://rustfs.cn/docs/
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
NotifyAccess=main
User=root
Group=root
WorkingDirectory=/usr/local
EnvironmentFile=-/etc/default/rustfs
ExecStart=/usr/local/bin/rustfs \$RUSTFS_VOLUMES
LimitNOFILE=1048576
LimitNPROC=32768
TasksMax=infinity
Restart=always
RestartSec=10s
OOMScoreAdjust=-1000
SendSIGKILL=no
TimeoutStartSec=30s
TimeoutStopSec=30s
NoNewPrivileges=true
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
ProtectClock=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
RestrictSUIDSGID=true
RestrictRealtime=true
# service log configuration
StandardOutput=append:/var/logs/rustfs/rustfs.log
StandardError=append:/var/logs/rustfs/rustfs-err.log
[Install]
WantedBy=multi-user.target
EOF- 重新加载服务配置
sudo systemctl daemon-reload7. 启动服务与验证
- 启动服务并设置开机自启
sudo systemctl enable --now rustfs- 验证服务状态
systemctl status rustfs- 检查服务端口
netstat -ntpl- 查看日志文件
tail -f /var/logs/rustfs/rustfs*.log- 访问控制台
输入服务器的 IP 地址和端口(UI 默认端口是 9001),尝试访问控制台,您看到的界面如下
