✅ RustFS 生产级高可用集群部署手册(完整版)
文档版本:v1.0
最后更新:2026年1月15日
目标:部署一个具备灾备能力、任意节点/磁盘故障不影响服务、开启安全认证、S3 兼容、带负载均衡与高可用的 RustFS 集群
一、架构概览
| 组件 | 数量 | IP 地址 | 说明 |
|---|---|---|---|
| RustFS 存储节点 | 4 |
192.168.10.101 ~ 104
|
每节点挂载独立磁盘 /data/rustfs
|
| Nginx 负载均衡器 | 2 |
192.168.10.201 (主), 202 (备) |
提供统一入口 + 健康检查 |
| Keepalived VIP | 1 | 192.168.10.100 |
虚拟 IP,应用唯一接入点 |
| 客户端 | - | 任意 | 通过 S3 协议访问 http://192.168.10.100:9000
|
容错能力:
- 可容忍 任意 2 个 RustFS 节点或磁盘同时故障
- 可容忍 1 台 LB 宕机
- 数据 不丢失、服务不中断
二、环境准备
2.1 硬件要求
| 角色 | CPU | 内存 | 磁盘 | 网络 |
|---|---|---|---|---|
| RustFS 节点 ×4 | ≥4 核 | ≥16 GB | ≥1 TB NVMe SSD(独立挂载) | 10 Gbps 内网 |
| LB 节点 ×2 | ≥2 核 | ≥4 GB | 系统盘即可 | 10 Gbps 内网 |
2.2 操作系统
所有节点:Ubuntu 22.04 LTS(或其他主流 Linux)
-
关闭防火墙(或放行端口):
sudo ufw disable # 或配置规则
2.3 网络规划
- 所有机器 内网互通
- 网卡名称假设为
eth0(请根据实际替换为ens192等)
三、第一步:部署 RustFS 存储集群(4 节点)
在
192.168.10.101~104上分别执行
3.1 安装 Docker 和 Docker Compose
# 更新系统
sudo apt update
# 安装基础工具
sudo apt install -y curl wget git net-tools
# 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3.2 创建数据目录
sudo mkdir -p /data/rustfs
sudo chown -R 1000:1000 /data/rustfs
💡 若使用独立磁盘,请先格式化并挂载到
/data/rustfs(如 XFS 文件系统)
3.3 生成强密钥(任选一台生成,全集群共用)
# 生成 Access Key(32 字符)
ACCESS_KEY=$(openssl rand -base64 24 | tr -d "=+/" | cut -c1-32)
# 生成 Secret Key(64 字符)
SECRET_KEY=$(openssl rand -base64 48 | tr -d "=+/" | cut -c1-64)
echo "ACCESS_KEY: $ACCESS_KEY"
echo "SECRET_KEY: $SECRET_KEY"
📌 记录这两个值!后续所有节点和客户端都要用
3.4 创建 Docker Compose 配置文件
在每台节点创建 /opt/rustfs/docker-compose.yml:
节点 101 (192.168.10.101):
version: '3.8'
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs
network_mode: host
environment:
- RUSTFS_VOLUMES=http://192.168.10.101:9000/data/rustfs,http://192.168.10.102:9000/data/rustfs,http://192.168.10.103:9000/data/rustfs,http://192.168.10.104:9000/data/rustfs
- RUSTFS_EC_LEVEL=4+2
- RUSTFS_ADDRESS=0.0.0.0:9000
- RUSTFS_EXTERNAL_ADDRESS=192.168.10.101:9000
- RUSTFS_CONSOLE_ENABLE=true
- RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001
- RUSTFS_ACCESS_KEY=YOUR_ACCESS_KEY_HERE
- RUSTFS_SECRET_KEY=YOUR_SECRET_KEY_HERE
- RUSTFS_ENABLE_HEAL=true
- RUSTFS_ENABLE_SCANNER=true
- RUSTFS_CHECKSUM_ALGORITHM=sha256
volumes:
- /data/rustfs:/data/rustfs
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
interval: 30s
timeout: 10s
retries: 3
🔁 在 102~104 上重复,仅修改
RUSTFS_EXTERNAL_ADDRESS为本机 IP
3.5 启动 RustFS 服务(按顺序)
在每台节点执行:
cd /opt/rustfs
sudo docker-compose up -d
启动顺序:101 → 102 → 103 → 104(间隔 10 秒)
3.6 验证集群状态
# 查看日志
docker logs rustfs | grep -E "(Cluster|Erasure|Heal)"
# 应看到类似:
# INFO rustfs::cluster] Cluster initialized with 4 nodes
# INFO rustfs::erasure] Erasure coding configured as 4+2
四、第二步:部署 Nginx + Keepalived(LB 高可用)
在
192.168.10.201(主)和202(备)上操作
4.1 安装 Nginx
sudo apt update && sudo apt install -y nginx
4.2 配置 Nginx 负载均衡
创建 /etc/nginx/sites-available/rustfs-lb:
upstream rustfs_backend {
server 192.168.10.101:9000 max_fails=3 fail_timeout=30s;
server 192.168.10.102:9000 max_fails=3 fail_timeout=30s;
server 192.168.10.103:9000 max_fails=3 fail_timeout=30s;
server 192.168.10.104:9000 max_fails=3 fail_timeout=30s;
least_conn;
}
server {
listen 9000;
server_name _;
location / {
proxy_pass http://rustfs_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
启用配置:
sudo ln -sf /etc/nginx/sites-available/rustfs-lb /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
4.3 安装 Keepalived
sudo apt install -y keepalived
4.4 配置 Keepalived
主节点(192.168.10.201):
编辑 /etc/keepalived/keepalived.conf:
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_RUSTFS {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass rustfs123
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
备节点(192.168.10.202):
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_RUSTFS {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass rustfs123
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
4.5 启动 Keepalived
sudo systemctl enable --now keepalived
4.6 验证 VIP
# 在主节点执行
ip addr show eth0 | grep 192.168.10.100
# 应显示 VIP
# 在备节点执行 → 不应显示(除非主宕机)
五、第三步:客户端测试与验证
5.1 安装 AWS CLI(任意客户端机器)
pip install awscli
5.2 配置 S3 客户端
# 使用 VIP 访问
export ENDPOINT="http://192.168.10.100:9000"
export ACCESS_KEY="YOUR_ACCESS_KEY_HERE"
export SECRET_KEY="YOUR_SECRET_KEY_HERE"
5.3 功能测试
# 列出 bucket
aws --endpoint-url $ENDPOINT --access-key $ACCESS_KEY --secret-key $SECRET_KEY s3 ls
# 创建 bucket
aws --endpoint-url $ENDPOINT --access-key $ACCESS_KEY --secret-key $SECRET_KEY s3 mb s3://test-bucket
# 上传文件
echo "High Availability Test" > ha-test.txt
aws --endpoint-url $ENDPOINT --access-key $ACCESS_KEY --secret-key $SECRET_KEY s3 cp ha-test.txt s3://test-bucket/
# 下载验证
aws --endpoint-url $ENDPOINT --access-key $ACCESS_KEY --secret-key $SECRET_KEY s3 cp s3://test-bucket/ha-test.txt ./recovered.txt
cat recovered.txt # 应输出 "High Availability Test"
5.4 故障模拟测试
场景 1:关闭一个 RustFS 节点
# 在 192.168.10.102 上
sudo docker stop rustfs
→ 客户端继续上传/下载 应成功
场景 2:关闭主 LB
# 在 192.168.10.201 上
sudo systemctl stop keepalived
→ VIP 自动漂移到 202,客户端 短暂中断后恢复
六、生产加固建议
6.1 安全加固
-
禁用公网访问:仅允许内网 IP 访问
9000/9001 -
定期轮换密钥:每 90 天更换
ACCESS_KEY/SECRET_KEY -
启用 TLS(可选):
- 在 Nginx 上配置 HTTPS
- RustFS 节点改用 HTTP(内网安全)
6.2 监控告警
- 暴露指标:RustFS 默认提供
/metrics(端口9090) - 接入 Prometheus + Grafana
- 告警规则:
rustfs_heal_queue_length > 100rustfs_disk_usage_percent > 85
6.3 备份策略
- 对
/data/rustfs做每日快照(LVM/ZFS) - 异地复制(待 RustFS 跨集群同步功能 GA)
七、附录:关键命令速查
| 操作 | 命令 |
|---|---|
| 查看 RustFS 日志 | docker logs -f rustfs |
| 重启 RustFS | cd /opt/rustfs && sudo docker-compose restart |
| 检查 VIP | ip addr show eth0 | grep 192.168.10.100 |
| 手动触发修复 | curl -u $ACCESS_KEY:$SECRET_KEY http://192.168.10.101:9000/rustfs/admin/heal |
| 健康检查 | curl http://192.168.10.100:9000/health |
✅ 至此,你已成功部署一个生产级、高可用、灾备就绪的 RustFS 集群!
下一步:
- 将
ACCESS_KEY/SECRET_KEY存入密码管理器- 编写运维手册(启停、扩容、故障处理)
- 配置监控告警