部署背景
我之前写过一篇容器部署MinIO的文章,但是2025年后官方已经放弃对社区版MinIO的维护,市面上比较好的开源平替也就RustFS好用一些,所以自己尝试搭建了一套
准备
RustFS的部署方式和MinIO基本一致,不过一个坑是如果单服务器双目录情况下,如果两个目录在同一个磁盘是无法启动的(参考我MinIO部署),需要添加环境变量跳过检测,这次部署的方式和MinIO集群基本一致,也是双节点四目录(2台物理机分别2个目录但是单磁盘)
环境说明
- node1 :192.168.0.101 存储目录:/data/rustfs/data1 /data/rustfs/data2 /data/rustfs/logs
- node2:192.168.0.102 存储目录:/data/rustfs/data1 /data/rustfs/data2 /data/rustfs/logs
首先创建目录
#2个服务器都要执行
mkdir -p /data/rustfs/{data1,data2,logs}
#给目录赋权,尽量不要给777
chmod -R 755 /data/rustfs
chown -R 10001:10001 /data/rustfs/data1 /data/rustfs/data2
chown -R 1000:1000 /data/rustfs/logs
创建完成后拉取镜像,不过也可以启动时候拉取
docker pull rustfs/rustfs:latest
拉取完成后创建docker compose文件
#先在node1执行
cd /data/rustfs && vim docker-compose.yml
version: "3.8"
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs
restart: unless-stopped
#network_mode: "host"
entrypoint: /usr/bin/rustfs
command: server http://192.168.0.101:9000/data/data1 http://192.168.0.101:9000/data/data2 http://192.168.0.102:9000/data/data1 http://192.168.0.102:9000/data/data2
ports:
- "9000:9000" # S3 API 端口(兼容 S3 协议,业务对接专用)
- "9001:9001" # Web 控制台端口(可视化管理)
environment:
RUSTFS_ACCESS_KEY: anger
RUSTFS_SECRET_KEY: Anger@666
RUSTFS_NODE_ID: node1
RUSTFS_UNSAFE_BYPASS_DISK_CHECK: "true"
TZ: Asia/Shanghai
volumes:
- /data/rustfs/data1:/data/data1
- /data/rustfs/data2:/data/data2
- /data/logs:/logs
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
node2也要创建docker compose文件
cd /data/rustfs && vim docker-compose.yml
version: "3.8"
services:
rustfs:
image: rustfs/rustfs:latest
container_name: rustfs
restart: unless-stopped
#network_mode: "host"
entrypoint: /usr/bin/rustfs
command: server http://192.168.0.101:9000/data/data1 http://192.168.0.101:9000/data/data2 http://192.168.0.102:9000/data/data1 http://192.168.0.102:9000/data/data2
ports:
- "9000:9000" # S3 API 端口(兼容 S3 协议,业务对接专用)
- "9001:9001" # Web 控制台端口(可视化管理)
environment:
RUSTFS_ACCESS_KEY: anger
RUSTFS_SECRET_KEY: Anger@666
RUSTFS_NODE_ID: node2
RUSTFS_UNSAFE_BYPASS_DISK_CHECK: "true"
TZ: Asia/Shanghai
volumes:
- /data/rustfs/data1:/data/data1
- /data/rustfs/data2:/data/data2
- /data/logs:/logs
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
部分配置说明
entrypoint: /usr/bin/rustfs 坑点一,如果不配置会导致启动命令后面带一个 /data导致无法启动
RUSTFS_UNSAFE_BYPASS_DISK_CHECK: "true" 坑点二,如果两个目录在一块磁盘需要此配置,否则无法通过磁盘验证导致无法启动
network_mode: "host" 可选项,配置后不用映射端口但要防止端口冲突
RUSTFS_NODE_ID: node1 两台服务器不能相同
启动服务
文件创建完成后,启动服务
#两台服务器分别执行,尽量保证一起启动
docker compose up -d
启动完成后查看日志,没有报错基本就是启动成功了
docker logs -f rustfs --tail 100
启动完成后可以尝试访问某个节点的web端,如:http://192.168.0.101:9001

输入环境变量中配置好的账户anger登录,密码是:Anger@666

状态中显示在线2个节点4个磁盘,集群就已经启动完成,使用方式基本和MinIO一致