RustFS 生产级高可用集群部署手册(完整版)

✅ 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 > 100
    • rustfs_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 集群!

下一步

  1. ACCESS_KEY / SECRET_KEY 存入密码管理器
  2. 编写运维手册(启停、扩容、故障处理)
  3. 配置监控告警
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容