集群配置

JUICE 模块配置说明:实例定义、存储后端与挂载参数。

概念与实现

JuiceFS 由 元数据引擎数据存储 两部分组成。 在 Pigsty v4.1 中,meta 会原样透传给 juicefs 作为元数据引擎 URL,生产场景通常使用 PostgreSQL。 数据存储通过 data 参数传入 juicefs format 选项决定。

JUICE 模块执行逻辑与关键命令:

# 格式化(仅首次创建有效)
juicefs format --no-update <data> "<meta>" "<name>"

# 挂载
juicefs mount <mount> --cache-dir <juice_cache> --metrics 0.0.0.0:<port> <meta> <path>

说明:

  • --no-update 确保已存在的文件系统不会被覆盖。
  • data 仅用于 首次格式化,文件系统已存在时不会生效。
  • mount 仅用于挂载阶段,可按需传入缓存与并发参数。

模块参数

JUICE 模块仅有两个参数:

参数类型级别说明
juice_cachepathCJuiceFS 共享缓存目录
juice_instancesdictIJuiceFS 实例字典(可为空)
  • juice_cache:所有实例共享的本地缓存目录,默认 /data/juice
  • juice_instances:在实例级别定义的实例字典,Key 为文件系统名称;空字典表示不管理实例

实例配置

juice_instances 的每个条目代表一个 JuiceFS 实例:

字段必选默认值说明
path-挂载点路径,如 /fs
meta-元数据引擎 URL(建议 PostgreSQL)
data''juicefs format 选项(存储后端)
unitjuicefs-<name>systemd 服务名
mount''juicefs mount 额外参数
port9567指标端口(同节点需唯一)
ownerroot挂载点属主
grouproot挂载点属组
mode0755挂载点权限
statecreatecreate / absent

配置示例:

juice_instances:
  jfs:
    path: /fs
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
    data: --storage postgres --bucket 10.10.10.10:5432/meta --access-key dbuser_meta --secret-key DBUser.Meta
    port: 9567

存储后端

data 字段直接拼接到 juicefs format,可配置任意支持的后端。 以下为常见示例:

PostgreSQL 大对象

juice_instances:
  jfs:
    path: /fs
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
    data: --storage postgres --bucket 10.10.10.10:5432/meta --access-key dbuser_meta --secret-key DBUser.Meta

MinIO 对象存储

juice_instances:
  jfs:
    path: /fs
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
    data: --storage minio --bucket http://10.10.10.10:9000/juice --access-key minioadmin --secret-key minioadmin

S3 兼容存储

juice_instances:
  jfs:
    path: /fs
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
    data: --storage s3 --bucket https://s3.amazonaws.com/my-bucket --access-key AKIAXXXXXXXX --secret-key XXXXXXXXXX

典型配置

多实例(同节点)

juice_instances:
  pgfs:
    path: /pgfs
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
    data: --storage postgres --bucket 10.10.10.10:5432/meta --access-key dbuser_meta --secret-key DBUser.Meta
    port: 9567
  shared:
    path: /shared
    meta: postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/shared
    data: --storage minio --bucket http://10.10.10.10:9000/shared
    port: 9568
    owner: postgres
    group: postgres

多节点共享挂载

多个节点挂载同一个 JuiceFS:

app:
  hosts:
    10.10.10.11: { juice_instances: { shared: { path: /shared, meta: "postgres://...", port: 9567 } } }
    10.10.10.12: { juice_instances: { shared: { path: /shared, meta: "postgres://...", port: 9567 } } }

第一次格式化由任一节点执行即可,其余节点会通过 --no-update 自动跳过。


注意事项

  • port 会暴露在 0.0.0.0,请结合防火墙或安全组控制访问。
  • data 变更不会更新已存在的文件系统,如需切换后端请手动处理。