跳到主要内容

RustFS 集群部署方案

一、节点信息汇总(固定IP+角色分工)​

节点角色主机名固定IP硬件配置(最小要求)系统版本核心职责
独立Nginx节点rustfs-nginx-proxy192.168.192.1252C2G,20GB系统盘Ubuntu 24.04 LTS负载均衡(9000控制台/9001 API)、HTTPS终止、统一访问入口
RustFS节点1rustfs-node1192.168.192.1262C4G,4块≥100GB数据盘Ubuntu 24.04 LTS分布式存储、数据冗余(纠删码)
RustFS节点2rustfs-node2192.168.192.1272C4G,4块≥100GB数据盘Ubuntu 24.04 LTS分布式存储、数据冗余(纠删码)
RustFS节点3rustfs-node3192.168.192.1282C4G,4块≥100GB数据盘Ubuntu 24.04 LTS分布式存储、数据冗余(纠删码)
RustFS节点4rustfs-node4192.168.192.1292C4G,4块≥100GB数据盘Ubuntu 24.04 LTS分布式存储、数据冗余(纠删码)

二、架构设计​

1. 拓扑逻辑​

客户端 → 独立Nginx(192.168.192.125:9000/9001)→ 四RustFS节点(192.168.192.126-129:9000/9001)→ 分布式存储(每节点4块数据盘,纠删码12+4)

2. 核心特性​

  • 统一入口:客户端仅访问Nginx节点IP(192.168.192.125),无需感知RustFS节点
  • 高可用:单RustFS节点故障/多磁盘故障,服务不中断、数据不丢失
  • 安全隔离:RustFS节点仅开放9000/9001端口给Nginx,不对外暴露

三、前置条件(所有节点执行,Ubuntu 24.04适配)​

1. 系统基础配置(统一操作)​

(1)更新系统并安装依赖​

# 更新软件源
sudo apt update && sudo apt upgrade -y

# 安装核心依赖(curl、wget、ntpdate、net-tools)
sudo apt install -y curl wget ntpdate net-tools

(2)时间同步(避免节点时间差)​

# 同步阿里云NTP服务器
sudo ntpdate ntp.aliyun.com

# 设置定时同步(每5分钟一次)
echo "*/5 * * * * root ntpdate ntp.aliyun.com" | sudo tee -a /etc/crontab

(3)关闭不必要服务(优化资源)​

# 关闭防火墙?不,后续配置精细化规则,保持ufw开启
sudo ufw enable

2. RustFS节点额外前置(126/127/128/129均执行)​

(1)磁盘准备(每节点4块空闲磁盘,假设为/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde)​

# 格式化磁盘为xfs(先安装xfs工具)
sudo apt install -y xfsprogs

# 检查磁盘是否存在
lsblk | grep sd[b-e]

# 格式化磁盘为xfs
sudo mkfs.xfs /dev/sdb && sudo mkfs.xfs /dev/sdc && sudo mkfs.xfs /dev/sdd && sudo mkfs.xfs /dev/sde

# 创建挂载目录
sudo mkdir -p /mnt/rustfs/data{1..4}

# 配置开机自动挂载(写入/etc/fstab)
echo "/dev/sdb /mnt/rustfs/data1 xfs defaults 0 0" | sudo tee -a /etc/fstab
echo "/dev/sdc /mnt/rustfs/data2 xfs defaults 0 0" | sudo tee -a /etc/fstab
echo "/dev/sdd /mnt/rustfs/data3 xfs defaults 0 0" | sudo tee -a /etc/fstab
echo "/dev/sde /mnt/rustfs/data4 xfs defaults 0 0" | sudo tee -a /etc/fstab

# 立即挂载并验证
sudo mount -a && df -h | grep /mnt/rustfs

# 检查挂载状态
mount | grep rustfs

(2)配置防火墙(仅允许Nginx节点访问9000/9001)​

# 允许Nginx节点(192.168.192.125)访问RustFS API(9000)和控制台(9001)
sudo ufw allow from 192.168.192.125 to any port 9000
sudo ufw allow from 192.168.192.125 to any port 9001

# 允许RustFS节点间通信(集群内部通信)
sudo ufw allow from 192.168.192.126 to 192.168.192.127 port 9000
sudo ufw allow from 192.168.192.126 to 192.168.192.128 port 9000
sudo ufw allow from 192.168.192.126 to 192.168.192.129 port 9000

sudo ufw allow from 192.168.192.127 to 192.168.192.126 port 9000
sudo ufw allow from 192.168.192.127 to 192.168.192.128 port 9000
sudo ufw allow from 192.168.192.127 to 192.168.192.129 port 9000

sudo ufw allow from 192.168.192.128 to 192.168.192.126 port 9000
sudo ufw allow from 192.168.192.128 to 192.168.192.127 port 9000
sudo ufw allow from 192.168.192.128 to 192.168.192.129 port 9000

sudo ufw allow from 192.168.192.129 to 192.168.192.126 port 9000
sudo ufw allow from 192.168.192.129 to 192.168.192.127 port 9000
sudo ufw allow from 192.168.192.129 to 192.168.192.128 port 9000

sudo ufw allow 22/tcp

# 重载防火墙规则
sudo ufw reload

# 验证规则(应显示允许125访问9000/9001,以及节点间通信规则)
sudo ufw status numbered

3. Nginx节点额外前置(125执行)​

(1)开放客户端访问端口(9000/9001)​

# 开放新的HTTP端口
sudo ufw allow 22/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 9001/tcp

# 重载防火墙
sudo ufw reload

# 验证规则
sudo ufw status numbered

四、硬件要求​

1. 最低配置​

  • 服务器节点:至少 4 台服务器
  • CPU:每节点至少 2 核
  • 内存:测试环境至少 2GB,生产环境建议 128GB
  • 磁盘:每节点至少 1 块硬盘
  • 网络:千兆以太网或更高带宽

2. 推荐配置​

  • 服务器节点:5-7 台服务器(便于扩展和维护)
  • CPU:每节点 4-8 核
  • 内存:每节点 128GB 或更多
  • 磁盘:每节点多个 NVMe SSD(JBOD 模式)
  • 网络:万兆以太网

五、系统准备​

1. 操作系统​

  • Ubuntu 22.04 LTS 或 Ubuntu 24.04 LTS(推荐)
  • RHEL 8.x 或 CentOS 8.x

2. 网络配置​

  1. 主机名设置:为每个节点配置唯一的主机名,并确保所有节点之间可以通过主机名互相解析
  2. 防火墙配置:开放必要的端口(默认为 9000)
  3. 时间同步:配置 NTP 服务确保所有节点时间同步

3. 系统优化​

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要工具
sudo apt install -y curl wget ntpdate net-tools xfsprogs

# 时间同步
sudo ntpdate ntp.aliyun.com
echo "*/5 * * * * root ntpdate ntp.aliyun.com" | sudo tee -a /etc/crontab

六、RustFS四节点部署(126/127/128/129均执行)​

步骤1:创建RustFS运行用户(在126/127/128/129节点均执行)​

# 创建非root用户rustfs-user
sudo useradd -m rustfs-user

# 授权存储目录权限
sudo chown -R rustfs-user:rustfs-user /mnt/rustfs

# 验证用户创建成功
id rustfs-user
echo $SHELL

步骤2:下载RustFS二进制文件(在126/127/128/129节点均执行)​

# 下载RustFS服务器端(稳定版)
sudo wget https://github.com/rustfs/rustfs/releases/latest/download/rustfs -P /usr/local/bin/

# 下载RustFS客户端(mc)
sudo wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/

# 授权执行权限
sudo chmod +x /usr/local/bin/rustfs /usr/local/bin/mc

# 验证安装(应输出版本信息)
rustfs --version

步骤3:配置RustFS环境变量(核心配置)(在126/127/128/129节点均执行)​

# 创建环境变量文件
sudo tee /etc/rustfs.env << EOF
# 管理员账号(自定义,生产环境建议使用强密码)
RUSTFS_ROOT_USER=rustfsadmin_2025
# 管理员密码(至少8位,生产建议复杂密码)
RUSTFS_ROOT_PASSWORD=RustFS@123456
# 纠删码冗余度(四节点16盘,配置parity=4)
RUSTFS_ERASURE_CODE_PARITY=4
# 日志目录
RUSTFS_LOG_DIR=/var/log/rustfs
# 设置服务器区域(可选,有助于性能优化)
RUSTFS_SITE_REGION=us-east-1

# 添加RustFS服务器地址配置(重要:确保与Nginx配置中的地址一致)
RUSTFS_SERVER_URL=http://192.168.192.125:9000
RUSTFS_BROWSER_REDIRECT_URL=http://192.168.192.125:9001
EOF

# 授权文件权限(仅rustfs-user可读)
sudo chmod 600 /etc/rustfs.env
sudo chown rustfs-user:rustfs-user /etc/rustfs.env

# 创建日志目录并授权
sudo mkdir -p /var/log/rustfs
sudo chown -R rustfs-user:rustfs-user /var/log/rustfs

步骤4:编写systemd服务脚本(在126/127/128/129节点均执行)​

# 创建RustFS服务文件
sudo tee /usr/lib/systemd/system/rustfs.service << EOF
[Unit]
Description=RustFS Distributed Server
Documentation=https://docs.rustfs.com
After=network.target

[Service]
User=rustfs-user
Group=rustfs-user
EnvironmentFile=/etc/rustfs.env
WorkingDirectory=/home/rustfs-user
# 简化ExecStart,避免换行转义错误
ExecStart=/usr/local/bin/rustfs server --console-address ":9001" http://192.168.192.126/mnt/rustfs/data1 http://192.168.192.126/mnt/rustfs/data2 http://192.168.192.126/mnt/rustfs/data3 http://192.168.192.126/mnt/rustfs/data4 http://192.168.192.127/mnt/rustfs/data1 http://192.168.192.127/mnt/rustfs/data2 http://192.168.192.127/mnt/rustfs/data3 http://192.168.192.127/mnt/rustfs/data4 http://192.168.192.128/mnt/rustfs/data1 http://192.168.192.128/mnt/rustfs/data2 http://192.168.192.128/mnt/rustfs/data3 http://192.168.192.128/mnt/rustfs/data4 http://192.168.192.129/mnt/rustfs/data1 http://192.168.192.129/mnt/rustfs/data2 http://192.168.192.129/mnt/rustfs/data3 http://192.168.192.129/mnt/rustfs/data4
Restart=always
RestartSec=5
LimitNOFILE=65536
TimeoutStartSec=300
TimeoutStopSec=300
OOMPolicy=continue
# 添加关键环境变量,确保RustFS知道自己的外部访问地址
Environment=RUSTFS_PROMETHEUS_AUTH_TYPE=public
Environment=RUSTFS_SERVER_URL=http://192.168.192.125:9001
Environment=RUSTFS_BROWSER_REDIRECT_URL=http://192.168.192.125:9000
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

步骤5:启动RustFS集群并验证(先在126节点执行,再在127/128/129节点执行)​

# 重载systemd配置
sudo systemctl daemon-reload

# 启动RustFS并设置开机自启
sudo systemctl enable --now rustfs

# 查看启动状态(应显示active(running))
sudo systemctl status rustfs

# 查看日志(验证集群启动成功)
sudo journalctl -u rustfs -f
  • 成功特征:日志显示 Status: 16 Online, 0 Offline、Endpoint: http://192.168.192.126:9000 http://192.168.192.127:9000

七、独立Nginx部署与负载均衡配置(125执行)​

步骤1:安装Nginx(Ubuntu 24.04默认版本足够,无需额外源)​

# 安装Nginx
sudo apt install -y nginx

# 启动Nginx并设置开机自启
sudo systemctl enable --now nginx

# 验证启动状态(应显示active(running))
sudo systemctl status nginx

步骤2:配置RustFS负载均衡(核心配置文件)​

# 创建RustFS专用代理配置文件
useradd -r -s /sbin/nologin nginx

sudo tee /etc/nginx/nginx.conf << 'EOF'

worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 4096;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;

# ====================== 上游集群配置(你的RustFS节点)======================
upstream rustfs {
server 192.168.192.126:9000 max_fails=3 fail_timeout=30s;
server 192.168.192.127:9000 max_fails=3 fail_timeout=30s;
server 192.168.192.128:9000 max_fails=3 fail_timeout=30s;
server 192.168.192.129:9000 max_fails=3 fail_timeout=30s;
}

upstream console {
ip_hash; # Console必需ip_hash,避免会话漂移
server 192.168.192.126:9001 max_fails=3 fail_timeout=30s;
server 192.168.192.127:9001 max_fails=3 fail_timeout=30s;
server 192.168.192.128:9001 max_fails=3 fail_timeout=30s;
server 192.168.192.129:9001 max_fails=3 fail_timeout=30s;
}

# ====================== RustFS API代理(端口9000)======================
server {
listen 9000;
listen [::]:9000;
server_name 192.168.192.125; # 你的负载均衡IP

# S3协议核心适配(参考配置关键项)
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;

location / {
proxy_set_header Host $http_host; # 自动包含端口,避免S3签名错误
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off; # 修复S3分块传输问题

proxy_pass http://rustfs;
}
}

# ====================== RustFS Console代理(端口9001)======================
server {
listen 9001;
listen [::]:9001;
server_name 192.168.192.125;

# Console核心适配
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;

real_ip_header X-Real-IP;

proxy_connect_timeout 300;

# 支持Console的websocket(参考配置关键项)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

chunked_transfer_encoding off;

proxy_pass http://console;
}
}
}
EOF

步骤3:配置HTTPS证书(Let's Encrypt免费证书)​

# 如果需要启用HTTPS,可以安装certbot和Nginx插件
# sudo apt install -y certbot python3-certbot-nginx

# 如需使用HTTPS,可通过以下方式之一:
# 1. 使用Let's Encrypt(需要有效域名)
# 2. 生成自签名证书(测试环境使用)
# 3. 使用企业内部CA签发的证书

# 注意:纯IP地址无法通过Let's Encrypt获取有效证书

步骤4:验证Nginx配置并重启​

# 检查配置语法(必须显示test is successful)
sudo nginx -t

# 重启Nginx生效配置
sudo systemctl restart nginx

七、验证部署​

1. 检查服务状态​

在每个节点上检查 RustFS 服务状态:

sudo systemctl status rustfs

2. 访问控制台​

通过浏览器访问负载均衡器的 9001 端口: http://LOAD_BALANCER_IP:9001

使用配置文件中设置的管理员凭据登录。

3. 测试 API 访问​

使用 mc(MinIO Client)测试 API 访问:

# 安装 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/
chmod +x /usr/local/bin/mc

# 配置别名
mc alias set rustfs-cluster http://LOAD_BALANCER_IP:9000 admin RustFS@2025

# 创建测试桶
mc mb rustfs-cluster/test-bucket

# 上传文件
echo "Hello RustFS" > test.txt
mc cp test.txt rustfs-cluster/test-bucket/

# 列出文件
mc ls rustfs-cluster/test-bucket/

4. 故障转移测试​

模拟节点故障以验证高可用性:

# 在某个节点上停止服务
sudo systemctl stop rustfs

# 验证服务仍然可用
mc ls rustfs-cluster/test-bucket/

# 重启服务
sudo systemctl start rustfs

八、完整功能验证(关键测试步骤)​

1. 基础访问验证​

(1)控制台访问​

浏览器打开:http://192.168.192.125:9001

  • 输入账号:rustfsadmin_2025,密码:RustFS@123456
  • 验证:登录后左侧「Server Info」→「Nodes」,显示4个节点(126/127/128/129)、16块磁盘均为「Online」

(2)API访问(mc工具测试)​

在任意客户端节点安装mc,连接Nginx代理:

# 安装mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/
chmod +x /usr/local/bin/mc

# 配置连接Nginx代理
mc alias set rustfs-cluster http://192.168.192.125:9000 rustfsadmin_2025 RustFS@123456

# 测试操作
mc mb rustfs-cluster/test-bucket # 创建测试桶
mc cp /etc/hosts rustfs-cluster/test-bucket/ # 上传文件
mc ls rustfs-cluster/test-bucket/ # 列出文件(应显示hosts文件)

2. 负载均衡验证​

查看Nginx访问日志,确认请求均匀分发到126/127/128/129:

# 查看API访问日志
sudo tail -f /var/log/nginx/access.log
  • 日志中应交替出现 upstream_addr=192.168.192.126:9000 、192.168.192.127:9000、192.168.192.128:9000 和 192.168.192.129:9000

3. 故障切换验证(核心高可用测试)​

(1)模拟RustFS节点故障(停止126节点)​

# 在192.168.192.126执行
sudo systemctl stop rustfs

(2)验证服务可用性​

  • 浏览器访问 http://192.168.192.125:9001,仍可正常登录
  • 下载文件:mc cp rustfs-cluster/test-bucket/hosts ./hosts-backup,能正常下载
  • 查看Nginx日志:仅显示转发到127/128/129节点,无报错

(3)恢复节点并验证同步​

# 在126节点重启RustFS
sudo systemctl start rustfs

# 查看126节点日志,确认数据同步
sudo journalctl -u rustfs -f | grep "sync"

# 验证负载恢复:日志中再次出现126节点的转发记录
sudo tail -f /var/log/nginx/access.log

4. 磁盘故障验证(可选)​

# 在126节点卸载1块磁盘(模拟故障)
sudo umount /mnt/rustfs/data1

# 验证:浏览器控制台→「Server Info」→「Disks」,126的data1为Offline,其余15块Online
# 访问文件:mc cat rustfs-cluster/test-bucket/hosts,仍可正常读取

# 恢复磁盘
sudo mount /mnt/rustfs/data1
sudo journalctl -u rustfs -f | grep "disk online" # 确认磁盘恢复

5. 数据备份和恢复策略(生产必备)​

# 备份RustFS数据(示例脚本)
#!/bin/bash
# 备份脚本路径:/opt/rustfs/backup.sh

# 设置变量
BACKUP_DIR="/backup/rustfs"
DATE=$(date +%Y%m%d_%H%M%S)
RUSTFS_ALIAS="rustfs-cluster"

# 创建备份目录
mkdir -p ${BACKUP_DIR}/${DATE}

# 备份所有存储桶列表
mc ls ${RUSTFS_ALIAS} > ${BACKUP_DIR}/${DATE}/buckets.list

# 备份每个存储桶(示例:备份test-bucket)
mc cp -r ${RUSTFS_ALIAS}/test-bucket ${BACKUP_DIR}/${DATE}/

# 压缩备份文件
tar -czf ${BACKUP_DIR}/${DATE}.tar.gz -C ${BACKUP_DIR} ${DATE}

# 删除原始备份目录
rm -rf ${BACKUP_DIR}/${DATE}

# 保留最近7天的备份
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +7 -delete

echo "Backup completed: ${BACKUP_DIR}/${DATE}.tar.gz"

九、性能优化​

1. 磁盘 IO 优化​

# 在 /etc/fstab 中添加磁盘挂载参数
/dev/sdb /mnt/rustfs/data1 xfs defaults,noatime,nodiratime 0 0

# 重新挂载
sudo mount -o remount /mnt/rustfs/data1

2. 网络优化​

# 调整 TCP 参数
sudo tee -a /etc/sysctl.conf << 'EOF'
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
EOF

# 应用配置
sudo sysctl -p

3. Nginx 优化​

编辑 /etc/nginx/nginx.conf:

worker_processes auto;
worker_rlimit_nofile 100000;

events {
worker_connections 4096;
use epoll;
multi_accept on;
}

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;

# 其他配置...
}

十、监控和告警​

1. 集成 Prometheus​

RustFS 提供了内置的监控指标端点,可以在 Prometheus 中配置:

scrape_configs:
- job_name: 'rustfs'
static_configs:
- targets: ['NODE1_IP:9000', 'NODE2_IP:9000', 'NODE3_IP:9000', 'NODE4_IP:9000']
metrics_path: '/metrics'

2. 告警规则​

配置关键告警规则:

groups:
- name: rustfs.rules
rules:
- alert: RustFSNodeDown
expr: rustfs_cluster_nodes_offline > 0
for: 1m
labels:
severity: critical
annotations:
summary: "RustFS node is down"
description: "{{ $labels.instance }} RustFS node is down"

- alert: RustFSDiskOffline
expr: rustfs_cluster_disk_offline > 0
for: 1m
labels:
severity: warning
annotations:
summary: "RustFS disk is offline"
description: "{{ $labels.instance }} RustFS disk is offline"

十一、扩展集群​

添加新节点​

  1. 准备新服务器并完成系统配置
  2. 安装 RustFS 并配置服务
  3. 将新节点加入现有集群
  4. 更新负载均衡器配置

容量规划​

  • 监控存储使用率,确保有足够的剩余空间
  • 定期评估扩容需求
  • 规划数据再平衡过程

十二、备份和恢复​

1. 定期备份策略​

#!/bin/bash
# 备份脚本示例
BACKUP_DIR="/backup/rustfs"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p ${BACKUP_DIR}/${DATE}

# 备份重要配置
cp /home/rustfs/.env ${BACKUP_DIR}/${DATE}/
cp /etc/systemd/system/rustfs.service ${BACKUP_DIR}/${DATE}/

# 使用 mc 备份数据(示例)
mc cp -r rustfs-cluster/test-bucket ${BACKUP_DIR}/${DATE}/

# 压缩备份
tar -czf ${BACKUP_DIR}/${DATE}.tar.gz -C ${BACKUP_DIR} ${DATE}

# 清理旧备份
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +7 -delete

2. 灾难恢复​

  • 保留完整的配置备份
  • 定期测试恢复过程
  • 文档化恢复步骤

十三、故障排除​

常见问题​

  1. 服务无法启动

    • 检查端口占用情况
    • 验证磁盘挂载状态
    • 查看日志文件:sudo journalctl -u rustfs -f
  2. 节点无法加入集群

    • 检查网络连通性
    • 验证主机名解析
    • 确认时间同步
  3. 性能下降

    • 检查磁盘 IO 性能
    • 分析网络延迟
    • 监控系统资源使用情况

诊断命令​

# 查看服务状态
sudo systemctl status rustfs

# 查看服务日志
sudo journalctl -u rustfs -f

# 检查磁盘使用情况
df -h

# 检查网络连接
ss -tuln | grep 9000

# 检查系统资源
top -p $(pgrep rustfs)

十四、安全加固​

1. 网络安全​

  • 限制管理端口访问
  • 使用防火墙规则控制流量
  • 启用 TLS 加密通信

2. 访问控制​

  • 定期更换管理员密码
  • 实施最小权限原则
  • 启用审计日志

3. 数据保护​

  • 配置 HTTPS 证书
  • 启用服务器端加密
  • 定期安全扫描

十五、Ubuntu 24.04专属注意事项​

1. 系统兼容性​

  • Ubuntu 24.04默认使用systemd-resolved,DNS解析无冲突,无需额外配置
  • 包管理器apt默认源已适配RustFS、Nginx、certbot等工具,无需添加第三方源

2. 防火墙规则​

  • Ubuntu 24.04默认启用ufw,所有规则已在前置步骤配置,避免误关闭ufw
  • 如需修改规则,使用sudo ufw edit allow from 192.168.192.125 to any port 9000(示例)

3. Nginx权限​

  • Ubuntu 24.04中Nginx运行用户为www-data,配置文件中无需修改用户,保持默认即可
  • 日志目录/var/log/nginx默认权限正确,无需额外授权

4. RustFS磁盘挂载​

  • 若使用NVMe磁盘(如/dev/nvme0n1p3),格式化和挂载命令相同,仅需替换设备名
  • 验证挂载:lsblk 可查看磁盘挂载状态,确保/dev/sdb→/mnt/rustfs/data1,依此类推

十六、生产环境优化建议​

1. Nginx性能优化(125节点)​

编辑/etc/nginx/nginx.conf,调整以下参数:

# 备份原配置文件
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

# 更新Nginx主配置文件
sudo tee /etc/nginx/nginx.conf << 'EOF'
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
use epoll;
worker_connections 10240;
multi_accept on;
}

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
types_hash_max_size 2048;

# 包含MIME类型
include /etc/nginx/mime.types;
default_type application/octet-stream;

# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;

# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml+rss
application/atom+xml
image/svg+xml;

# 包含站点配置
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
EOF

重启Nginx:sudo systemctl restart nginx

2. RustFS性能优化(126/127/128/129节点)​

  • 磁盘IO优化:添加磁盘读写缓存参数到/etc/fstab,重新挂载:

    sudo sed -i 's/defaults/defaults,noatime,nodiratime/' /etc/fstab
    sudo mount -a
  • 网络优化:调整TCP参数,提升并发连接:

    sudo tee -a /etc/sysctl.conf << EOF
    net.core.somaxconn = 65535
    net.ipv4.tcp_max_syn_backlog = 65535
    net.ipv4.tcp_fin_timeout = 30
    EOF
    sudo sysctl -p

3. 监控配置(生产必备)​

(1)RustFS监控(对接Prometheus)​

RustFS自带监控接口,在Prometheus中添加配置:

scrape_configs:
- job_name: 'rustfs'
static_configs:
- targets: ['192.168.192.126:9000', '192.168.192.127:9000', '192.168.192.128:9000', '192.168.192.129:9000']
metrics_path: '/rustfs/v2/metrics/cluster'
# 添加基本认证(如果启用了)
# basic_auth:
# username: rustfsadmin_2025
# password: RustFS@123456

(2)Nginx监控(安装nginx-prometheus-exporter)​

# 在125节点安装
sudo apt install -y nginx-prometheus-exporter
sudo systemctl enable --now nginx-prometheus-exporter

在Prometheus中添加192.168.192.125:9113作为监控目标

(3)告警规则配置(Prometheus rules)​

groups:
- name: rustfs.rules
rules:
- alert: RustFSNodeDown
expr: rustfs_cluster_nodes_offline_total > 0
for: 1m
labels:
severity: critical
annotations:
summary: "RustFS node is down"
description: "{{ $labels.instance }} RustFS node is down"

- alert: RustFSDiskOffline
expr: rustfs_cluster_disk_offline_total > 0
for: 1m
labels:
severity: warning
annotations:
summary: "RustFS disk is offline"
description: "{{ $labels.instance }} RustFS disk is offline"

- alert: HighErrorRate
expr: rate(rustfs_s3_requests_errors_total[5m]) > 0.01
for: 5m
labels:
severity: warning
annotations:
summary: "High error rate"
description: "{{ $labels.instance }} RustFS has high error rate"

4. 版本升级策略(生产必备)​

(1)滚动升级步骤​

  1. 确保集群健康状态良好
  2. 逐个停止并升级RustFS节点
  3. 验证升级后节点功能正常
  4. 继续升级下一个节点

(2)升级脚本示例​

#!/bin/bash
# RustFS升级脚本路径:/opt/rustfs/upgrade.sh

# 停止RustFS服务
sudo systemctl stop rustfs

# 备份当前RustFS二进制文件
sudo cp /usr/local/bin/rustfs /usr/local/bin/rustfs.backup.$(date +%Y%m%d)

# 下载新版本RustFS
sudo wget https://github.com/rustfs/rustfs/releases/latest/download/rustfs -O /usr/local/bin/rustfs.new

# 替换二进制文件
sudo mv /usr/local/bin/rustfs.new /usr/local/bin/rustfs

# 授权执行权限
sudo chmod +x /usr/local/bin/rustfs

# 启动RustFS服务
sudo systemctl start rustfs

# 验证版本
rustfs --version

echo "RustFS upgrade completed"

5. 故障排查指南​

(1)常见问题排查命令​

# 查看RustFS服务状态
sudo systemctl status rustfs

# 查看RustFS服务日志
sudo journalctl -u rustfs -f

# 查看集群健康状态
mc admin info rustfs-cluster

# 查看存储桶和对象信息
mc ls rustfs-cluster

# 查看磁盘状态
mc admin info rustfs-cluster --json | jq '.storage'

# 查看网络连接状态
ss -tuln | grep 9000

(2)性能监控命令​

# 查看系统资源使用情况
top -p $(pgrep rustfs)

# 查看磁盘IO情况
iostat -x 1

# 查看网络流量
iftop -i eth0

# 查看内存使用情况
free -h

十五、版本升级​

升级步骤​

  1. 备份当前配置和数据
  2. 逐个节点停止服务
  3. 替换二进制文件
  4. 启动服务并验证
  5. 更新负载均衡器(如有必要)

注意事项​

  • 避免同时升级所有节点
  • 监控升级过程中的性能变化
  • 准备回滚计划