Skip to content

使用 JuiceFS 与 MinIO 扩展 lidong 存储

准备工作

  1. 服务器
    • server-A:带有独立数据盘的 lidong 服务器,用于部署对象存储。
    • server-B:需要挂载远端存储空间的业务服务器。
  2. 软件工具
    • MinIO
    • Juicefs
    • Redis
    • docker/podman
    • docker-compose/podman-compose

开始前请记录两台服务器的内网地址,并确认防火墙只开放实际需要的端口。

第一步:在存储节点(server-A)部署 MinIO

建议将 MinIO 数据目录放在独立数据盘,并与系统盘隔离。

假设数据盘分区路径为 /dev/vdb,将其格式化为 XFS 文件系统,并设置标签 MINIODRIVE1

格式化分区

bash
mkfs.xfs /dev/vdb -L MINIODRIVE1

然后创建一个目录 (/minio/data) 挂载上去:

挂载分区

bash
mkdir -p /minio/data
mount -t xfs -o "noatime,nodiratime" /dev/vdb /minio/data

创建 MinIO 的配置文件 /etc/default/minio,内容如下(注意修改用户名和密码: MINIO_ROOT_USERMINIO_ROOT_PASSWORD):

minio.conf

ini
MINIO_ROOT_USER=minio-user-name
MINIO_ROOT_PASSWORD=CHANGE_ME_MINIO_ROOT_PASSWORD

MINIO_VOLUMES="/data"

MINIO_OPTS="--console-address :9001"

接下来使用容器启动 MinIO:

假设你已经安装 docker/podman 和 docker-compose

Minio 的 compose.yaml 文件内容如下:

yaml
version: "3.8"
services:
  minio_local:
    image: quay.io/minio/minio
    container_name: minio_local
    ports:
      - 9000:9000 # MinIO API 端口
      - 9001:9001 # MinIO Web 控制台端口
    volumes:
      - /minio/data:/data # 替换为上面挂载了分区的目录
      - /etc/default/minio:/etc/config.env
    environment:
      - MINIO_CONFIG_ENV_FILE=/etc/config.env # 指定配置文件路径
    command: server --console-address ":9001" # 启动 MinIO 服务器并指定控制台端口
    restart: always # 容器自动重启策略

启动 MinIO:docker compose -f compose.yaml up -d

打开 http://{机器 ip}:9001 看看是否启动成功,看到如下界面说明成功

MinIO 服务启动成功

使用前面设置的用户名与密码登录,点击左侧 Buckets -> Create bucket 创建新存储桶,例如命名为 juicefs

在 MinIO 创建 JuiceFS 存储桶

然后创建新的 keys 用于后续的 juicefs。

点击左侧 Access Keys创建新的 keys,并记录:

安全提示:Secret Key 只会完整显示一次。请保存到密码管理器,不要截图或提交到公开仓库。

现在 Minio 部署完成了。

第二步:在存储节点(server-A)部署 Redis

使用容器部署 Redis 十分简单,先找个目录创建 redis 配置文件,例如 /redis/redis.conf,内容如下:

redis.conf

bash
# 关闭保护
protected-mode no
# 绑定监听IP地址
bind 0.0.0.0
maxmemory 1024mb
appendonly yes
appendfsync everysec

然后创建容器 compose.yaml 文件。请将 CHANGE_ME_REDIS_PASSWORD 替换为高强度随机密码:

compose.yaml

yaml
version: "3"
services:
  juicefs-redis:
    image: redis:latest
    container_name: juicefs-redis
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: "2"
    ports:
      - 6379:6379
    volumes:
      - redis-data:/data
      - ./redis.conf:/etc/redis.conf
    restart: always
    command: redis-server /etc/redis.conf --requirepass CHANGE_ME_REDIS_PASSWORD

volumes:
  db-data:

然后启动容器:docker compose up -d

然后使用以下命令验证 redis 是否成功:

bash
docker exec juicefs-redis redis-cli -a CHANGE_ME_REDIS_PASSWORD ping

显示 pong 表示 redis 启动成功,现在第二步完成了。

第三步:在应用节点(server-B)安装并挂载 JuiceFS

  1. 执行以下命令安装 juicefs:
bash
curl -sSL https://d.juicefs.com/install | sh -
  1. 创建一个目录用于挂载 juicefs,例如 /shared-jfs
bash
mkdir /shared-jfs
  1. 创建名为 shared-jfs 的 juicefs:

假设:

  • server-A ip 为:1.2.3.4
  • Minio 创建的存储桶名字为 juicefs
  • minio 的访问密钥对:
    • access-key:YOUR_MINIO_ACCESS_KEY
    • secret-key:YOUR_MINIO_SECRET_KEY
  • Redis 密码:CHANGE_ME_REDIS_PASSWORD
  • redis 端口为:6379
  • juicefs 文件系统名为 shared-jfs
bash
juicefs format --storage minio --bucket http://1.2.3.4:9000/juicefs --access-key YOUR_MINIO_ACCESS_KEY --secret-key YOUR_MINIO_SECRET_KEY redis://:CHANGE_ME_REDIS_PASSWORD@1.2.3.4:6379/1 shared-jfs

注:redis 地址中最后的 1 改为其他值可以创建新的 juicefs

成功后会在 MinIO web 控制台的 juicefs 存储桶中看到名为 shared-jfs 的文件夹。

然后挂载 juicefs 文件系统到 /shared-jfs 目录:

bash
juicefs mount -d redis://:CHANGE_ME_REDIS_PASSWORD@1.2.3.4:6379/1 /shared-jfs

-d 表示后台运行

运行 JuiceFS 自带的性能测试。以下命令关闭大文件测试,以缩短验证时间:

bash
juicefs bench --big-file-size 0 /shared-jfs

JuiceFS 性能测试结果

再来看一下存储空间:

JuiceFS 存储空间信息

完成验证

至此,server-B 已挂载由 MinIO 提供后端存储的 JuiceFS 文件系统。投入生产前,请继续验证重启后的自动挂载、网络中断恢复、访问凭据轮换与备份策略。

lidong 文档中心 · 清晰、可靠、持续维护