在Docker /Systemd 上JuiceFS 的挂载指南,以postgres数据库为例

以下是使用 Docker 和 systemd 两种方法挂载 JuiceFS 文件系统的详细指南,结合配置文件及关键参数说明:


一、通过 systemd 服务挂载 JuiceFS

步骤说明:

  1. 创建服务文件

    使用 nano /etc/systemd/system/mnt-juicefs.service 编辑服务配置:

    ini 复制代码
    [Unit]
    Description=JuiceFS Mount Service
    After=network-online.target
    Requires=network-online.target
    
    [Service]
    Type=forking
    ExecStartPre=/usr/bin/mkdir -pv /mnt/juicefs/
    ExecStart=/usr/local/bin/juicefs mount \
      --update-fstab \
      --max-uploads=50 \
      --writeback \
      --cache-size 20480 \
      "--bucket=http://<对象存储地址>:<对象存储端口>/juicefs" \
      "postgres://<数据库用户>:<数据库密码>@<数据库地址>:<数据库端口>/juicefs" \
      /mnt/juicefs
    ExecStop=/bin/fusermount -u /mnt/juicefs
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    参数解释

    • --max-uploads=50:并行上传线程数,提升吞吐量 。
    • --writeback:启用写回缓存模式,优化性能 。
    • --cache-size 20480:设置 20GB 本地缓存 。
    • --bucketpostgres://:指定对象存储和元数据引擎地址 。
  2. 启用并启动服务

    bash 复制代码
    sudo systemctl daemon-reload
    sudo systemctl enable mnt-juicefs.service
    sudo systemctl start mnt-juicefs.service
  3. 验证挂载

    检查服务状态及挂载点:

    bash 复制代码
    systemctl status mnt-juicefs
    df -h | grep juicefs

二、通过 Docker 容器挂载 JuiceFS

配置文件(docker-compose.yml)解析:

yaml 复制代码
version: "3.6"
services:
  mount-verysync:
    image: juicedata/mount:ce-v1.2.3
    container_name: mount-verysync
    privileged: true
    cap_add:
      - SYS_ADMIN
    devices:
      - /dev/fuse:/dev/fuse
    command:
      - "juicefs"
      - "mount"
      - "--max-uploads=50"
      - "--writeback"
      - "--cache-size"
      - "204800"
      - "--bucket=http://<对象存储地址>:<对象存储端口>/verysync"
      - "postgres://<数据库用户>:<数据库密码>@<数据库地址>:<数据库端口>/verysync"
      - "/media/docker/volume/verysync"
    volumes:
      - /media/docker/volume/verysync:/media/docker/volume/verysync:rw,rshared
    networks:
      - mount-verysync_default
    restart: always
    security_opt:
      - apparmor:unconfined

networks:
  mount-verysync_default:
    driver: bridge
    enable_ipv6: true
    ipam:
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.1
        - subnet: fc01:db8:21:172::/64
          gateway: fc01:db8:21:172::1

关键配置说明:

  1. 权限与设备

    • privileged: truecap_add: SYS_ADMIN:允许容器访问 FUSE 设备 。
    • devices: /dev/fuse:挂载宿主机的 FUSE 设备到容器 。
  2. 挂载参数

    • --cache-size 204800:设置 200GB 缓存,需根据磁盘容量调整 。
    • --bucketpostgres://:与元数据引擎和对象存储通信 。
  3. 网络与存储

    • 启用 IPv6 并配置双栈网络,确保容器与外部服务连通性 。
    • volumes 挂载宿主机目录,实现数据持久化 。
  4. 启动与验证

    bash 复制代码
    docker-compose up -d
    docker logs mount-verysync  # 查看日志

三、注意事项

  1. 权限问题

    • 确保 JuiceFS 客户端有权限访问元数据数据库(如 PostgreSQL)和对象存储 。
    • 宿主机目录 /media/docker/volume/verysync 需提前创建并授权。
  2. 卸载文件系统

    bash 复制代码
    # systemd
    sudo systemctl stop mnt-juicefs
    sudo fusermount -u /mnt/juicefs
    
    # Docker
    docker-compose down
    sudo fusermount -u -z /media/docker/volume/verysync  # 强制卸载 
  3. 性能调优

    根据场景调整 --max-uploads--cache-size,高并发场景可适当增大值 。


通过上述两种方法,可灵活实现 JuiceFS 在物理机或容器化环境中的自动挂载,满足不同场景需求。

相关推荐
江池俊1 小时前
解锁无限创意:Tldraw+cpolar如何通过内网穿透技术打破空间限制
docker
Honeysea_701 小时前
容器的定义及工作原理
人工智能·深度学习·机器学习·docker·ai·持续部署
2418ly1 小时前
docker常用命令
运维·docker·容器
yuxb731 小时前
Docker学习笔记(三):镜像与容器管理进阶操作
笔记·学习·docker
明月(Alioo)2 小时前
机器学习入门,用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!
macos·docker·容器
水上冰石3 小时前
k8s证书理论知识之/etc/kubernetes/pki/ 和/var/lib/kubelet/pki/的区别
云原生·容器·kubernetes·数字证书·证书过期
To_再飞行3 小时前
K8s访问控制(一)
云原生·容器·kubernetes
虚伪的空想家3 小时前
K8S的Pod为什么可以解析访问集群之外的域名地址
云原生·容器·kubernetes·dns·域名解析·pod·coredns
❀͜͡傀儡师3 小时前
二进制安装Kubernetes(k8s)v1.34.0
云原生·容器·kubernetes
Zs05093 小时前
k8s基础练习环境搭建
云原生·容器·kubernetes