部署背景

我之前写过一篇容器部署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一致

发表回复