跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

模块:MINIO

使用 MINIO 兼容模块部署 Silo S3 对象存储,并作为 PostgreSQL 备份仓库。

MINIO 是 Pigsty 中 S3 兼容对象存储的兼容模块名。当前角色部署 Silo,并且 minio_type 只接受 silo

Silo 沿用 MinIO 的 S3/Admin API、MINIO_* 环境变量、磁盘格式与 mcli 客户端接口,可用作 PostgreSQL pgBackRest 备份仓库。模块名、参数前缀和监控 job 继续使用 MINIO / minio_*,以保持现有清单和运维入口兼容。

重要

miniorustfs 不再是有效的 minio_type,会在身份检查阶段失败。升级由旧版本管理的 MinIO 集群前,必须先完成备份、MinIO → Silo 兼容性验证与回滚演练;不能把软件包替换当作已经验收的数据迁移。外部 MinIO、RustFS 或其他 S3 服务仍可作为 pgBackRest 仓库,但不由当前 MINIO 角色管理。

MINIO 是 可选模块。若将它用作 pgBackRest 的 S3 仓库,应在 PGSQL 模块之前部署;TLS 证书与主机基线由 NODE / CA 能力提供。


快速开始

以下配置显式定义一个单节点 Silo 集群。minio_clusterminio_seq 都是必填身份参数;生产清单应显式写出 minio_type: silo

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 }
  vars:
    minio_cluster: minio
    minio_type: silo
./minio.yml -l minio    # 在 minio 分组上部署 Silo

清单分组名可以与 minio_cluster 不同,角色按每台主机的 minio_cluster 身份计算实际成员。不要在 all.vars 中定义 minio_cluster,否则所有主机都会被视为对象存储成员。

部署完成后可通过以下入口访问:

  • S3 APIhttps://sss.pigsty:9000(域名需要显式配置 DNS 或 /etc/hosts
  • 管理界面https://<node-ip>:9001
  • 命令行mcli ls sss/(管理节点与集群成员上会写入预配置别名)

默认管理员凭证为 minioadmin / S3User.MinIO,只适合演示;生产部署前必须修改。


部署模式

Silo 使用以下 Pigsty 清单部署模式:

模式 说明 适用场景
单机单盘(SNSD) 单节点、单个数据目录 开发、测试、演示
单机多盘(SNMD) 单节点、多块磁盘 资源受限的小规模部署
多机单盘(MNSD) 多节点、每节点一个数据盘 紧凑高可用部署
多机多盘(MNMD) 多节点、每节点多块磁盘 生产环境推荐

minio_data 始终是目录路径。分布式与多盘部署要求这些目录位于非根盘的独立持久文件系统上;例如 /data/minio 可以是独立挂载点 /data 下的子目录,但不能只是根文件系统中的普通目录。

minio_volumes 的多池扩容语义来自 Silo 保留的 MinIO 兼容接口;生产扩缩容前仍应按实际 Silo 版本验证操作与回滚流程。


核心能力

  • 兼容接口:Silo 沿用 minio_* 参数、S3 端口、TLS 和 mcli 置备流程
  • 高可用拓扑:支持单节点、多节点单盘与多节点多盘部署,可在同一清单中定义多套独立集群
  • 备份仓库:可作为 pgBackRest 的 S3 远程仓库
  • 安全基线:默认启用 HTTPS,并由 Pigsty CA 为每个实例签发证书
  • 可观测性:通过 /minio/metrics/v3 采集 Silo 指标,并提供 Grafana 面板与告警
  • 兼容运维:模块名、目标目录、监控标签和客户端别名保留 MINIO 命名空间

1 - 使用方法

快速使用 MINIO 模块部署的 Silo,并通过 mcli、rclone 与 pgBackRest 接入。

当您 配置 并执行 剧本 部署 Silo 后,可以参考本页通过 S3 与 mcli 兼容接口使用它。


部署集群

首先在 配置清单 中定义单机单盘对象存储集群,并显式锁定引擎:

minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio, minio_type: silo } }

然后,针对定义的分组(这里为 minio)执行 Pigsty 提供的 minio.yml 剧本即可:

./minio.yml -l minio

请注意在 deploy.yml 中,事先定义好的 Silo 集群会自动创建,无需手动再次执行 minio.yml 剧本。

生产多节点部署应通读 Pigsty 配置文档,并核对实际 Silo 版本的操作约束。


接入集群

生产环境建议通过域名与 HTTPS 访问对象存储(默认配置也是 HTTPS)。 如果您显式设置 minio_httpsfalse,也可以使用 HTTP 访问。 无论哪种方式,都请确保对象存储服务域名(默认为 sss.pigsty)正确指向服务节点或负载均衡器。

  1. 您可以在 node_etc_hosts 中添加静态解析记录,或者手工修改 /etc/hosts 文件
  2. 您可以在内网的 DNS 服务器上添加一条记录,如果已经有了现成的 DNS 服务
  3. 如果您启用了 Infra 节点上的 DNS 服务器,可以在 dns_records 中添加记录

生产环境通常建议使用第一种方式:静态 DNS 解析记录,避免对象存储服务依赖动态 DNS。

应将 S3 服务域名指向 Silo 节点或负载均衡器的 IP 地址与服务端口。 Pigsty 默认使用 sss.pigsty 作为 S3 服务域名,并在 9000 端口提供服务;角色不会自动为 minio_domain 创建全局 DNS 解析,需要按上文显式配置。

部分示例在 Silo 集群上部署 HAProxy 对外暴露服务,此时模板使用 9002 作为统一服务端口。


添加别名

要使用 mcli 客户端访问 minio 服务器集群,首先要配置服务器的别名(alias):

mcli alias ls  # 列出 minio 别名(默认使用sss)
mcli alias set sss https://sss.pigsty:9000 minioadmin S3User.MinIO            # root 用户
mcli alias set sss https://sss.pigsty:9002 minioadmin S3User.MinIO            # root 用户,使用负载均衡器 9002 端口

mcli alias set pgbackrest https://sss.pigsty:9000 pgbackrest S3User.Backup    # 使用备份用户

完整执行 minio.yml 且启用 minio_provision 后,角色会为所有 Infra 节点与按 minio_cluster 发现的实际对象存储成员上的 Ansible 执行用户配置默认别名;同一主机同时属于两者时只写入一次。

MinIO 客户端工具 mcli 的完整功能参考,请查阅文档: MinIO 客户端

注意:请使用您实际配置的密码

上述示例中的密码 S3User.MinIO 是 Pigsty 的默认值。如果您在部署时修改了 minio_secret_key,请使用您实际配置的密码。


用户管理

使用 mcli 可以管理 Silo 中的业务用户。默认置备已经创建 pgbackrests3user_metas3user_data;下面创建一个额外用户,并附加默认生成的 data 桶策略:

mcli admin user list sss
set +o history
mcli admin user add sss appuser 'Replace.With.Strong.Password'
mcli admin policy attach sss data --user=appuser
set -o history

存储桶管理

您可以对 Silo 中的存储桶进行增删改查

mcli ls sss/                         # 列出别名 'sss' 的所有桶
mcli mb --ignore-existing sss/hello  # 创建名为 'hello' 的桶
mcli rb --force sss/hello            # 强制删除 'hello' 桶

对象管理

您也可以对存储桶内的对象进行增删改查,详情请参考官方文档:对象管理

mcli cp /www/pigsty/* sss/data/      # 将本地软件源的内容上传到默认创建的 data 桶中
mcli cp sss/data/plugins.tgz /tmp/   # 从 Silo 下载文件到本地
mcli ls sss/data                     # 列出 data 桶中的所有文件
mcli rm sss/data/plugins.tgz         # 删除 data 桶中的特定文件
mcli cat sss/data/repo_complete      # 查看 data 桶中的文件内容

使用rclone

Pigsty 仓库中提供了 rclone,一个方便的多云对象存储客户端,可以用它访问 Silo 服务。

yum install rclone;  # EL 系列系统
apt install rclone;  # Debian/Ubuntu 系统

mkdir -p ~/.config/rclone/;
tee ~/.config/rclone/rclone.conf > /dev/null <<EOF
[sss]
type = s3
access_key_id = minioadmin
secret_access_key = S3User.MinIO
endpoint = https://sss.pigsty:9000
EOF

rclone ls sss:/
注意:HTTPS 与证书信任

如果 Silo 使用 HTTPS(默认配置),需要确保客户端信任 Pigsty CA 证书(/etc/pki/ca.crt),或者在 rclone 配置中添加 no_check_certificate = true 跳过证书验证(不建议在生产环境使用)。


配置备份仓库

在 Pigsty 中,MINIO 模块的主要用例是作为 pgBackRest 的 S3 备份仓库。 当您将 pgbackrest_method 设为 minio 时,PGSQL 模块会使用同名的 S3 兼容仓库预设;MINIO 模块部署的 Silo 可以直接使用该预设。

pgbackrest_method: local          # pgbackrest repo method: local,minio,[user-defined...]
pgbackrest_repo:                  # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
  local:                          # default pgbackrest repo with local posix fs
    path: /pg/backup              # local backup directory, `/pg/backup` by default
    retention_full_type: count    # retention full backups by count
    retention_full: 2             # keep 2, at most 3 full backup when using local fs repo
  minio:                          # optional minio repo for pgbackrest
    type: s3                      # minio is s3-compatible, so s3 is used
    s3_endpoint: sss.pigsty       # minio endpoint domain name, `sss.pigsty` by default
    s3_region: us-east-1          # minio region, us-east-1 by default, useless for minio
    s3_bucket: pgsql              # minio bucket name, `pgsql` by default
    s3_key: pgbackrest            # minio user access key for pgbackrest
    s3_key_secret: S3User.Backup  # minio user secret key for pgbackrest
    s3_uri_style: path            # use path style uri for minio rather than host style
    path: /pgbackrest             # minio backup path, default is `/pgbackrest`
    storage_port: 9000            # minio port, 9000 by default
    storage_ca_file: /etc/pki/ca.crt  # minio ca file path, `/etc/pki/ca.crt` by default
    bundle: y                     # bundle small files into a single file
    cipher_type: aes-256-cbc      # enable AES encryption for remote backup repo
    cipher_pass: pgBackRest       # AES encryption password, default is 'pgBackRest'
    retention_full_type: time     # retention full backup by time on minio repo
    retention_full: 14            # keep full backup for last 14 days

如果使用多节点 Silo 集群并通过负载均衡器对外提供服务,需要相应修改这里的 s3_endpointstorage_port

2 - 集群配置

使用 MINIO 模块部署 Silo,并按单机、多盘、多节点模式配置可靠的 S3 对象存储接入。

在部署 MINIO 模块之前,需要在 配置清单 中定义 Silo 对象存储集群。当前角色要求 minio_type: silo,支持以下清单部署模式:

  • 单机单盘:SNSD:单机单盘模式,可以使用任意目录作为数据盘,仅作为开发、测试、演示使用。
  • 单机多盘:SNMD:折中模式,在单台服务器上使用多块磁盘 (>=2),仅当资源极为有限时使用。
  • 多机单盘:MNSD:多台服务器各使用一个独立数据盘,提供紧凑的节点级高可用能力。
  • 多机多盘:MNMD:多机多盘模式,标准生产环境部署,具有最好的可靠性,但需要多台服务器。

SNSD 适合开发测试,三节点 MNSD 适合资源受限的紧凑高可用部署,MNMD 适合对容量、吞吐和磁盘冗余有更高要求的生产环境。SNMD 只解决单机内的磁盘故障,不能容忍整机故障。

此外,Silo 可以使用 多池部署 扩容,或直接部署 多套集群

使用多节点集群时,访问任意成员都可以获取 S3 服务,因此最佳实践是在集群前使用负载均衡与 高可用服务接入机制


后端选择

minio_type: silo   # 当前唯一合法值

minio_type 是为后续扩展保留的选择器,但当前部署与移除角色都只接受 silo。它对应 silo 软件包、silo.service/etc/default/silo~/.minio/certs/。为支持原地迁移,silo.service 会先读取旧的 /etc/default/minio,再读取优先级更高的 /etc/default/silo,并与旧 minio.service 冲突;新部署只应维护 Silo 配置文件。

旧清单中的 minio_type: miniominio_type: rustfs 会在身份检查阶段失败。升级已有 MinIO 部署前,应先验证 MinIO → Silo 的数据兼容性、备份与回滚路径。下文引用 MinIO 上游拓扑术语和链接,是因为 Silo 保留对应兼容接口,并不表示当前角色仍安装 minio 软件包。


核心参数

Pigsty 使用 minio_volumes 描述成员与磁盘,并将其渲染为 Silo 的 MINIO_VOLUMES。角色会根据清单自动生成该值,也允许显式覆盖。

  • 单机单盘:minio_volumes 指向本机上的普通目录,默认由 minio_data 生成,默认位置为 /data/minio
  • 单机多盘:minio_volumes 指向本机上的序列挂载点,同样由 minio_data 生成,例如 /data{1...4}
  • 多机单盘:minio_volumes 指向每台服务器上的一个数据目录,例如 https://minio-{1...3}.pigsty:9000/data/minio
  • 多机多盘:minio_volumes 指向多台服务器上的序列挂载点,由以下两部分自动组合生成:
    • 首先要使用 minio_data 指定集群每个成员的磁盘挂载点序列 /data{1...4}
    • 还需要使用 minio_node 指定节点的命名模式 ${minio_cluster}-${minio_seq}.pigsty
  • 多池部署:需要显式指定 minio_volumes 来分配每个存储池的节点。

存储路径与挂载

minio_data 配置的是文件系统目录,不是裸块设备。磁盘、云盘、独立分区或 LVM 逻辑卷应先格式化并挂载,再把挂载点或其子目录交给 Silo;不要把 /dev/sdb 直接写入 minio_data

MINIO 角色会创建数据目录并设置属主与权限,但不会替生产服务器完成磁盘格式化和持久化挂载。不同拓扑对目录背后的文件系统有不同要求:

  • 单机单盘可以使用根文件系统中的普通目录,但只适合开发、测试与演示。
  • 单机多盘中的每个数据路径都应对应独立文件系统,不能用同一块盘上的多个普通目录冒充多盘。
  • 多节点分布式 Silo 会识别并拒绝根文件系统上的数据路径,错误为 drive is part of root drive, will not be used

因此,/data/minio 可以是普通子目录,前提是 /data 本身已经挂载到独立持久化文件系统;如果 /data 只是 / 下的普通目录,则不满足分布式部署要求。绑定挂载根文件系统中的另一个目录也不会形成新的磁盘故障域。

可以在部署前检查实际挂载关系:

findmnt -T /
findmnt -T /data/minio

第二条命令应显示 /data/data/minio 对应的独立挂载点,而不是 /。生产环境还应确保挂载写入 /etc/fstab 或由等效的持久化机制管理,并为同一存储池使用容量接近的数据盘。


单机单盘

SNSD 模式,兼容拓扑参考:MinIO 单机单盘部署

在 Pigsty 中,定义一个单例 Silo 实例非常简单:

# 1 节点 1 数据目录
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio, minio_type: silo } }

单机模式下,必要的身份参数是 minio_seqminio_cluster,它们会唯一标识每一个对象存储实例。

单节点单磁盘模式仅用于开发目的,因此您可以使用一个普通的目录作为数据目录,该目录由参数 minio_data 默认为 /data/minio

使用 Silo 时,强烈建议通过静态解析的域名记录访问服务。例如,假设 minio_domain 使用默认的 sss.pigsty, 那么您可以在所有节点上添加一个静态解析,便于其他节点访问此服务。

node_etc_hosts: ["10.10.10.10 sss.pigsty"] # domain name to access minio from all nodes (required)
SNSD 仅适用于开发测试

单节点单盘模式应当仅用于开发、测试、演示目的,因为它无法容忍任何硬件故障,也无法带来多磁盘的性能改善。生产环境请使用 多机多盘 模式。


单机多盘

SNMD 模式,兼容拓扑参考:MinIO 单机多盘部署

要在单节点上使用多块磁盘,所需的操作与 单机单盘 基本一致,但用户需要以 {{ prefix }}{x...y} 的特定格式指定 minio_data,该格式定义了序列磁盘挂载点。

minio:
  hosts: { 10.10.10.10: { minio_seq: 1 } }
  vars:
    minio_cluster: minio         # 对象存储集群标识,必填
    minio_data: '/data{1...4}'   # minio 数据目录,使用 {x...y} 记号来指定多块磁盘
请使用真实磁盘挂载点

SNMD 模式中的每个数据路径都必须位于独立文件系统上。如果多个路径实际落在同一个文件系统中,Silo 会拒绝把它们作为多块盘使用。生产环境建议使用 XFS;Vagrant 在 XFS 工具不可用时也支持以 ext4 准备测试数据盘。

例如 Vagrant 对象存储 沙箱 定义了一个带有 4 块磁盘的单节点 Silo 集群:/data1/data2/data3/data4。启动 Silo 前,需要正确挂载并使用 xfs 格式化这些磁盘:

mkfs.xfs /dev/vdb; mkdir /data1; mount -t xfs /dev/vdb /data1;   # 挂载第1块盘……
mkfs.xfs /dev/vdc; mkdir /data2; mount -t xfs /dev/vdc /data2;   # 挂载第2块盘……
mkfs.xfs /dev/vdd; mkdir /data3; mount -t xfs /dev/vdd /data3;   # 挂载第3块盘……
mkfs.xfs /dev/vde; mkdir /data4; mount -t xfs /dev/vde /data4;   # 挂载第4块盘……

挂载磁盘属于服务器置备的部分,超出 Pigsty 的处理范畴。挂载的磁盘应该同时写入 /etc/fstab 以便在服务器重启后可以自动挂载。

/dev/vdb /data1 xfs defaults,noatime,nodiratime 0 0
/dev/vdc /data2 xfs defaults,noatime,nodiratime 0 0
/dev/vdd /data3 xfs defaults,noatime,nodiratime 0 0
/dev/vde /data4 xfs defaults,noatime,nodiratime 0 0

SNMD 模式可以利用单机上的多块磁盘,提供更高的性能和容量,并且容忍部分磁盘故障。 但单节点模式无法容忍整个节点的故障,而且您无法在运行时添加新的节点,因此如果没有特殊原因,我们不建议在生产环境中使用 SNMD 模式。


多机单盘

MNSD 模式在多台服务器上各使用一个数据盘。以下配置定义了一个三节点单盘 Silo 集群,也是 ha/trio 使用的存储拓扑:

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 }
    10.10.10.11: { minio_seq: 2 }
    10.10.10.12: { minio_seq: 3 }
  vars:
    minio_cluster: minio
    minio_type: silo
    minio_data: /data/minio

角色会生成 https://minio-{1...3}.pigsty:9000/data/minio。三条路径分别位于三台服务器上,每台服务器的 /data/minio 都必须落在非根盘的独立持久文件系统中。

三盘存储集默认使用 EC:1:每个对象拆分为 2 份数据和 1 份校验,读写仲裁都是 2,因此允许一个节点或一个数据盘不可用。使用容量相同的磁盘时,扣除文件系统与元数据开销前,可用容量约为原始容量的三分之二,并由最小磁盘容量限制。

这是资源占用较低的紧凑高可用拓扑,消除了单节点对象存储故障,但每个节点仍只有一个数据盘。需要更高容量、吞吐或节点内磁盘冗余时,应使用 多机多盘 模式。

既有单节点存储池不能通过直接增加两个成员原地改成三节点存储池。需要创建新的三节点集群、迁移对象并切换客户端入口。


多机多盘

MNMD 模式,兼容拓扑参考:MinIO 多机多盘部署

除了使用 单机多盘 模式中的 minio_data 指定磁盘,还需要使用 minio_node 指定多节点名称模式。

例如,以下配置定义了一个 Silo 集群,其中有四个节点,每个节点有四块磁盘:

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 }  # 实际节点名: minio-1.pigsty
    10.10.10.11: { minio_seq: 2 }  # 实际节点名: minio-2.pigsty
    10.10.10.12: { minio_seq: 3 }  # 实际节点名: minio-3.pigsty
    10.10.10.13: { minio_seq: 4 }  # 实际节点名: minio-4.pigsty
  vars:
    minio_cluster: minio
    minio_data: '/data{1...4}'                         # 每个节点使用四块磁盘
    minio_node: '${minio_cluster}-${minio_seq}.pigsty' # minio 节点名称规则

minio_node 参数指定 MINIO 模块内部的节点名称模式,用于生成每个节点的唯一名称。 默认情况下,节点名称是 ${minio_cluster}-${minio_seq}.pigsty,其中 ${minio_cluster} 是集群名称,${minio_seq} 是节点序号。 实例名称会自动写入各 Silo 节点的 /etc/hosts 中进行静态解析,供集群成员互相识别和访问。

在这种情况下,派生的 minio_volumeshttps://minio-{1...4}.pigsty:9000/data{1...4},以标识四个节点上的四块盘;角色再将其写入 Silo 使用的兼容环境变量。 您可以直接在对象存储集群中指定 minio_volumes,覆盖自动生成的值。 但通常不需要这样做,因为 Pigsty 会自动根据配置清单生成它。


多池部署

Silo 保留通过添加新存储池扩容的兼容能力。在 Pigsty 中,可以显式指定 minio_volumes 为每个存储池分配节点。

例如,假设您已经创建了 多机多盘 样例中的 Silo 集群,现在需要添加一个同样由四个节点构成的新存储池。

那么,你需要直接覆盖指定 minio_volumes 参数:

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 }
    10.10.10.11: { minio_seq: 2 }
    10.10.10.12: { minio_seq: 3 }
    10.10.10.13: { minio_seq: 4 }
    
    10.10.10.14: { minio_seq: 5 }
    10.10.10.15: { minio_seq: 6 }
    10.10.10.16: { minio_seq: 7 }
    10.10.10.17: { minio_seq: 8 }
  vars:
    minio_cluster: minio
    minio_data: "/data{1...4}"
    minio_node: '${minio_cluster}-${minio_seq}.pigsty' # minio 节点名称规则
    minio_volumes: 'https://minio-{1...4}.pigsty:9000/data{1...4} https://minio-{5...8}.pigsty:9000/data{1...4}'

在这里,空格分隔的两个参数分别代表两个存储池,每个存储池有四个节点,每个节点有四块磁盘。更多信息见 管理预案:集群扩容


多套集群

您可以将新节点部署为独立的 Silo 集群。以下配置使用不同身份声明两套对象存储集群:

minio1:
  hosts:
    10.10.10.10: { minio_seq: 1 }
    10.10.10.11: { minio_seq: 2 }
    10.10.10.12: { minio_seq: 3 }
    10.10.10.13: { minio_seq: 4 }
  vars:
    minio_cluster: minio1
    minio_data: "/data{1...4}"

minio2:
  hosts:    
    10.10.10.14: { minio_seq: 5 }
    10.10.10.15: { minio_seq: 6 }
    10.10.10.16: { minio_seq: 7 }
    10.10.10.17: { minio_seq: 8 }
  vars:
    minio_cluster: minio2
    minio_data: "/data{1...4}"
    minio_alias: sss2
    minio_domain: sss2.pigsty
    minio_endpoint: https://sss2.pigsty:9000

minio_cluster 没有默认值,每套集群都必须显式定义。多集群共存时,还必须使用不同的 minio_aliasminio_domainminio_endpoint,否则 Infra 节点上的共享客户端别名或域名会互相覆盖。Ansible 分组名可以与 minio_cluster 不同,角色按身份参数从整个清单发现成员。


服务接入

Silo 默认使用 9000 端口提供 S3 服务。多节点集群可以通过访问 任意一个成员 来访问服务。

服务接入属于 NODE 模块的功能范畴,这里仅做基本介绍。

多节点对象存储集群的高可用接入可以使用 L2 VIP 或 HAProxy 实现。例如,可用 keepalived 绑定 L2 VIP,或使用 NODE 模块提供的 haproxy 组件暴露 S3 服务。

# object storage cluster with 4 nodes and 4 drives per node
minio:
  hosts:
    10.10.10.10: { minio_seq: 1 , nodename: minio-1 }
    10.10.10.11: { minio_seq: 2 , nodename: minio-2 }
    10.10.10.12: { minio_seq: 3 , nodename: minio-3 }
    10.10.10.13: { minio_seq: 4 , nodename: minio-4 }
  vars:
    minio_cluster: minio
    minio_data: '/data{1...4}'
    minio_buckets: [ { name: pgsql }, { name: infra }, { name: redis } ]
    minio_users:
      - { access_key: dba , secret_key: S3User.DBA, policy: consoleAdmin }
      - { access_key: pgbackrest , secret_key: S3User.SomeNewPassWord , policy: readwrite }

    # bind a node l2 vip (10.10.10.9) to minio cluster (optional)
    node_cluster: minio
    vip_enabled: true
    vip_vrid: 128
    vip_address: 10.10.10.9
    vip_interface: eth1

    # expose minio service with haproxy on all nodes
    haproxy_services:
      - name: minio                    # [REQUIRED] service name, unique
        port: 9002                     # [REQUIRED] service port, unique
        balance: leastconn             # [OPTIONAL] load balancer algorithm
        options:                       # [OPTIONAL] minio health check
          - option httpchk
          - option http-keep-alive
          - http-check send meth OPTIONS uri /minio/health/live
          - http-check expect status 200
        servers:
          - { name: minio-1 ,ip: 10.10.10.10 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-2 ,ip: 10.10.10.11 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-3 ,ip: 10.10.10.12 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-4 ,ip: 10.10.10.13 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

例如,上面的配置块在 Silo 集群的所有节点上启用 HAProxy,通过 9002 端口暴露 S3 服务,并为集群绑定一个二层 VIP。 使用时应将 sss.pigsty 解析到 VIP 10.10.10.9,并通过 9002 端口访问。任意节点故障时,VIP 会切换到其他节点。

在这种情况下,还需要修改全局域名解析以及 minio_endpoint,更新写入管理节点的 mcli Alias 端点:

minio_endpoint: https://sss.pigsty:9002   # 覆盖默认值: https://sss.pigsty:9000
node_etc_hosts: ["10.10.10.9 sss.pigsty"] # 其他节点使用 sss.pigsty 访问 Silo

专用负载均衡

Pigsty 允许用户使用专用的负载均衡服务器组,而不是集群本身来运行 VIP 与 HAProxy。例如 ha/simu 模板中就使用了这种方式。

proxy:
  hosts:
    10.10.10.18 : { nodename: proxy1 ,node_cluster: proxy ,vip_interface: eth1 ,vip_role: master }
    10.10.10.19 : { nodename: proxy2 ,node_cluster: proxy ,vip_interface: eth1 ,vip_role: backup }
  vars:
    vip_enabled: true
    vip_address: 10.10.10.20
    vip_vrid: 20
    
    haproxy_services:      # expose minio service : sss.pigsty:9002
      - name: minio        # [REQUIRED] service name, unique
        port: 9002         # [REQUIRED] service port, unique
        balance: leastconn # Use leastconn algorithm and minio health check
        options: [ "option httpchk", "option http-keep-alive", "http-check send meth OPTIONS uri /minio/health/live", "http-check expect status 200" ]
        servers:           # reload service with ./node.yml -t haproxy_config,haproxy_reload
          - { name: minio-1 ,ip: 10.10.10.21 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-2 ,ip: 10.10.10.22 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-3 ,ip: 10.10.10.23 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-4 ,ip: 10.10.10.24 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-5 ,ip: 10.10.10.25 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

在这种情况下,还需要将 sss.pigsty 指向负载均衡器,并修改 minio_endpoint,更新管理节点上的 mcli Alias 端点:

minio_endpoint: https://sss.pigsty:9002    # overwrite the defaults: https://sss.pigsty:9000
node_etc_hosts: ["10.10.10.20 sss.pigsty"] # domain name to access minio from all nodes (required)

访问服务

如果要从 PGSQL 访问上面通过 HAProxy 暴露的 Silo,可以在 pgbackrest_repo 中添加新的备份仓库定义:

# 新增的 HA S3 Repo 定义,替代之前的单机配置
minio_ha:
  type: s3
  s3_endpoint: minio-1.pigsty   # s3_endpoint 可以是任何一个负载均衡器:10.10.10.1{0,1,2},或指向任意 3 个节点的域名
  s3_region: us-east-1          # 你可以使用外部域名:sss.pigsty,该域名指向任一成员(`minio_domain`)
  s3_bucket: pgsql              # 你可使用实例名和节点名:minio-1.pigsty minio-1.pigsty minio-1.pigsty minio-1 minio-2 minio-3
  s3_key: pgbackrest            # 为 Silo 的 pgbackrest 用户使用专用密码
  s3_key_secret: S3User.SomeNewPassWord
  s3_uri_style: path
  path: /pgbackrest
  storage_port: 9002            # 使用负载均衡器的端口 9002 代替默认的 9000(直接访问)
  storage_ca_file: /etc/pki/ca.crt
  bundle: y
  cipher_type: aes-256-cbc      # 在您的生产环境中最好使用新的加密密码,这里可以使用集群名作为密码的一部分。
  cipher_pass: pgBackRest.With.Some.Extra.PassWord.And.Salt.${pg_cluster}
  retention_full_type: time
  retention_full: 14

暴露管控

Silo 默认通过 9001 端口(由 minio_admin_port 指定)提供 Web 管控界面。

将后台管理界面暴露给外部可能存在安全隐患。如果确实需要,请将 Silo 添加到 infra_portal 并刷新 Nginx 配置。

# ./infra.yml -t nginx
infra_portal:
  home         : { domain: h.pigsty }
  grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
  vmetrics     : { domain: v.pigsty ,endpoint: "${admin_ip}:8428" }
  alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9059" }
  blackbox     : { endpoint: "${admin_ip}:9115" }
  vlogs        : { endpoint: "${admin_ip}:9428" }

  # 对象存储管理页面需要 HTTPS / Websocket
  minio        : { domain: m.pigsty     ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
  minio10      : { domain: m10.pigsty   ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
  minio11      : { domain: m11.pigsty   ,endpoint: "10.10.10.11:9001" ,scheme: https ,websocket: true }
  minio12      : { domain: m12.pigsty   ,endpoint: "10.10.10.12:9001" ,scheme: https ,websocket: true }
  minio13      : { domain: m13.pigsty   ,endpoint: "10.10.10.13:9001" ,scheme: https ,websocket: true }

不要 在生产环境中暴露未加密的对象存储管控页面。

这意味着,通常需要在 DNS 服务器或本机 /etc/hosts 中添加 m.pigsty 解析记录,以便访问 Silo 管控页面。

与此同时,如果您使用的是 Pigsty 自签名的 CA 而不是一个正规的公共 CA,通常您还需要手工信任该 CA 或证书,才能跳过浏览器中的 “不安全” 提示信息。

3 - 参数列表

MINIO 模块提供 22 个公开参数,用于部署、配置与移除 Silo 对象存储集群。

MINIO 模块共有 22 个公开参数,分为两个部分:

  • MINIO:19 个参数,用于部署 Silo 对象存储集群
  • MINIO_REMOVE:3 个参数,控制对象存储集群的移除
架构变化:Pigsty v3.6+

自 Pigsty v3.6 起,minio.yml 剧本不再包含移除功能,移除相关参数已迁移至独立的 minio_remove 角色和 minio-rm.yml 剧本。


参数概览

MINIO 参数组用于配置 Silo 对象存储集群,包括身份、存储路径、端口、认证凭据以及存储桶和用户置备。

参数 类型 级别 说明
minio_type enum G/C 保留的后端选择器,当前只接受 silo
minio_seq int I minio 实例标识符,必填
minio_cluster string C 对象存储集群名称,必填
minio_user username C minio 操作系统用户,默认为 minio
minio_https bool G/C 是否为对象存储启用 HTTPS?默认为 true
minio_node string C minio 节点名模式
minio_data path C minio 数据目录,使用 {x...y} 指定多个磁盘
minio_volumes string C minio 核心参数,指定成员节点与磁盘,默认不指定
minio_domain string G minio 外部域名,默认为 sss.pigsty
minio_port port C minio 服务端口,默认为 9000
minio_admin_port port C minio 控制台端口,默认为 9001
minio_access_key username C 根访问密钥,默认为 minioadmin
minio_secret_key password C 根密钥,默认为 S3User.MinIO
minio_extra_vars string C minio 服务器的额外环境变量
minio_provision bool G/C 是否执行 minio 资源置备任务?默认为 true
minio_alias string G minio 部署的客户端别名
minio_endpoint string C minio 部署的客户端别名对应的端点
minio_buckets bucket[] C 待创建的 minio 存储桶列表
minio_users user[] C 待创建的 minio 用户列表

MINIO_REMOVE 参数组控制对象存储集群的移除行为,包括防误删保险、数据清理以及软件包卸载。

参数 类型 级别 说明
minio_safeguard bool G/C/A 防止意外删除?默认为 false
minio_rm_data bool G/C/A 移除时是否删除 Silo 数据?默认为 true
minio_rm_pkg bool G/C/A 移除时是否卸载 Silo 与 mcli?默认为 false

其中,minio_volumesminio_endpoint 为自动生成的参数,但您可以显式覆盖指定这两个参数。


默认参数

MINIO:19 个公开参数,定义于 roles/minio/defaults/main.yml

#-----------------------------------------------------------------
# SILO
#-----------------------------------------------------------------
minio_type: silo                  # 保留的对象存储后端选择器,当前只接受 silo
#minio_seq: 1                     # minio 实例标识符,必填
#minio_cluster: minio             # minio 集群标识符,必填
minio_user: minio                 # minio 操作系统用户,默认为 `minio`
minio_https: true                 # 是否为 Silo 启用 HTTPS?默认为 true
minio_node: '${minio_cluster}-${minio_seq}.pigsty' # minio 节点名模式
minio_data: '/data/minio'         # minio 数据目录,使用 `{x...y}` 指定多个磁盘
#minio_volumes:                   # minio 核心参数,如果未指定,则使用拼接生成的默认值
minio_domain: sss.pigsty          # minio 外部域名,默认为 `sss.pigsty`
minio_port: 9000                  # minio 服务端口,默认为 9000
minio_admin_port: 9001            # minio 控制台端口,默认为 9001
minio_access_key: minioadmin      # 根访问密钥,默认为 `minioadmin`
minio_secret_key: S3User.MinIO    # 根密钥,默认为 `S3User.MinIO`
minio_extra_vars: ''              # minio 服务器的额外环境变量
minio_provision: true             # 是否执行 minio 资源置备任务?
minio_alias: sss                  # minio 部署的客户端别名
#minio_endpoint: https://sss.pigsty:9000 # minio 别名对应的接入点,如果未指定,则使用拼接生成的默认值
minio_buckets:                    # 待创建的 minio 存储桶列表
  - { name: pgsql }
  - { name: meta ,versioning: true }
  - { name: data }
minio_users:                      # 待创建的 minio 用户列表
  - { access_key: pgbackrest  ,secret_key: S3User.Backup ,policy: pgsql }
  - { access_key: s3user_meta ,secret_key: S3User.Meta   ,policy: meta  }
  - { access_key: s3user_data ,secret_key: S3User.Data   ,policy: data  }

MINIO_REMOVE:3 个参数,定义于 roles/minio_remove/defaults/main.yml

#-----------------------------------------------------------------
# MINIO_REMOVE
#-----------------------------------------------------------------
minio_safeguard: false            # 防止意外删除?默认为 false
minio_rm_data: true               # 移除时是否删除 minio 数据?默认为 true
minio_rm_pkg: false               # 移除时是否卸载 minio 软件包?默认为 false
# MINIO(引用)
minio_type: silo                  # 对象存储引擎,当前必须为 silo

MINIO

本节包含 minio 角色的参数, 这些是 minio.yml 剧本使用的操作标志参数。

minio_type

参数名称:minio_type,类型:enum,层次:G/C

保留的对象存储后端选择器,默认值与当前唯一合法值都是 silo。Silo 沿用 MinIO S3/Admin API、MINIO_* 环境变量与磁盘格式。

miniorustfs 不再是有效取值,会在角色身份检查阶段失败。旧 MinIO 集群升级到 v4.5 前,必须独立验证备份、MinIO → Silo 数据兼容性与回滚方案;修改参数本身不会执行数据迁移。

部署与移除角色都将 minio_type 默认为 silo。执行 minio-rm.yml 时仍必须提供 minio_clusterminio_seq 身份参数,并受 minio_safeguard、数据与软件包清理开关约束;默认引擎值不会绕过这些删除保护。


minio_seq

参数名称: minio_seq, 类型: int, 层次:I

对象存储实例标识符,必需的身份参数。没有默认值,您必须手动分配这些序列号。

通常的最佳实践是,从 1 开始分配,依次加 1,并永远不使用已经分配的序列号。 序列号与集群名称 minio_cluster 一起,唯一标识每一个对象存储实例(例如:minio-1)。

在多节点部署中,序列号还会用于生成节点名称,写入 /etc/hosts 文件中进行静态解析。


minio_cluster

参数名称: minio_cluster, 类型: string, 层次:C

对象存储集群名称,必填且没有默认值。当部署多个集群时,使用此参数区分各自的成员与监控身份。

集群名称与序列号 minio_seq 一起,唯一标识每一个对象存储实例。 例如,当集群名为 minio,序列号为 1 时,实例名称为 minio-1

角色会在整个清单中按主机的 minio_cluster 值查找成员,因此 Ansible Group 名称可以与集群标识不同。请在对象存储分组的集群变量中显式定义本参数,不要放入 all.vars,否则会把所有主机标记为 MINIO 模块成员。

部署多套集群时,还应分别设置 minio_aliasminio_domainminio_endpoint,避免共享客户端别名与域名冲突。


minio_user

参数名称: minio_user, 类型: username, 层次:C

对象存储操作系统用户名,默认为 minio

Silo 将以此用户身份运行,证书位于 ~/.minio/certs/


minio_https

参数名称: minio_https, 类型: bool, 层次:G/C

是否为对象存储服务启用 HTTPS?默认为 true

Pigsty 默认的 pgBackRest minio 仓库预设使用 HTTPS,并通过 /etc/pki/ca.crt 校验证书,因此按默认配置使用时应保持本参数为 true。pgBackRest 本身并不强制 Silo 使用 HTTPS;若显式改用 HTTP,还必须同步调整 pgbackrest_repo 的存储 TLS 选项,不能只切换本参数。

启用 HTTPS 后,Pigsty 会自动为所选服务端签发证书,证书包含 minio_domain 指定的域名以及各个节点的 IP 地址。


minio_node

参数名称: minio_node, 类型: string, 层次:C

对象存储节点名称模式,用于 多机单盘多机多盘 部署。

默认值为:${minio_cluster}-${minio_seq}.pigsty,即以实例名 + .pigsty 后缀作为默认的节点名。

在这里指定的域名模式用于生成节点名,并写入所有 Silo 节点的 /etc/hosts


minio_data

参数名称: minio_data, 类型: path, 层次:C

Silo 数据目录,默认值为 /data/minio。该参数填写文件系统目录,而不是 /dev/sdb 之类的裸块设备;MINIO 角色会创建目录并设置权限,但不会格式化或挂载生产服务器的数据盘。

单机单盘 可以使用根文件系统中的普通目录,但只适合开发测试。多机单盘多机多盘单机多盘 应使用非根盘的独立持久文件系统。分布式 Silo 会拒绝根文件系统上的数据路径。

/data/minio 可以是独立挂载点 /data 下的子目录;如果 /data 只是 / 下的普通目录,则仍属于根盘。对于多盘部署,可以使用 {x...y} 记法指定多个挂载点,例如 /data{1...4}/minio,每个展开后的路径应对应独立文件系统。

完整的挂载要求与检查方法参见 集群配置:存储路径与挂载


minio_volumes

参数名称: minio_volumes, 类型: string, 层次:C

Silo 核心卷参数,默认不指定;留空时会自动使用以下规则拼接生成:

minio_volumes: "{% if minio_cluster_size|int > 1 %}{% if minio_https|bool %}https{% else %}http{% endif %}://{{ minio_node|replace('${minio_cluster}', minio_cluster)|replace('${minio_seq}',minio_seq_range) }}:{{ minio_port|default(9000) }}{% endif %}{{ minio_data }}"
  • 在单机部署(无论是单盘还是多盘)模式下,minio_volumes 直接使用 minio_data 的值,进行单机部署。
  • 在多机部署模式下,minio_volumes 会使用 minio_node, minio_port, minio_data 参数的值生成多节点的地址,用于多机部署。
  • 在多池部署模式下,通常需要您直接指定并覆盖 minio_volumes 的值,以指定多个节点池的地址。

指定本参数时,您需要确保使用的参数与 minio_node, minio_port, minio_data 三者匹配。


minio_domain

参数名称: minio_domain, 类型: string, 层次:G

Silo 服务域名,默认为 sss.pigsty

客户端可以通过此域名访问 Silo S3 服务;该名称会包含在角色签发的 SSL 证书 SAN(Subject Alternative Name)字段中,但 MINIO 角色不会自动为 minio_domain 创建 DNS 记录。请通过 node_etc_hostsdns_records 显式添加解析,将它指向 Silo 节点 IP(单机部署)或负载均衡器 VIP(多节点部署)。


minio_port

参数名称: minio_port, 类型: port, 层次:C

Silo 服务端口,默认为 9000

这是 Silo S3 API 的监听端口,客户端通过此端口访问对象存储服务。在多节点部署中,此端口也用于节点间通信。


minio_admin_port

参数名称: minio_admin_port, 类型: port, 层次:C

Silo 控制台端口,默认为 9001

这是 Silo Web 管理控制台的监听端口。可以通过 https://<minio-ip>:9001 访问图形化管理界面。

如果希望通过 Nginx 对外暴露 Silo 控制台,可以将其添加到 infra_portal 中。控制台需要使用 HTTPS 和 WebSocket。


minio_access_key

参数名称: minio_access_key, 类型: username, 层次:C

根访问用户名(access key),默认为 minioadmin

这是 Silo 的超级管理员用户名,拥有对所有存储桶和对象的完全访问权限。建议在生产环境中修改此默认值。


minio_secret_key

参数名称: minio_secret_key, 类型: password, 层次:C

根访问密钥(secret key),默认为 S3User.MinIO

这是 Silo 超级管理员密码,与 minio_access_key 配合使用。

安全警告:请务必修改默认密码!

使用默认密码是高危行为!请务必在您的生产环境部署中修改此密码。

提示:执行 ./configure -g 时,会随机化配置向导识别的默认密码;完整范围见 默认凭证清单


minio_extra_vars

参数名称: minio_extra_vars, 类型: string, 层次:C

传递给 Silo 的额外环境变量。Silo 沿用 MINIO_* 变量名。

默认值为空字符串,您可以使用多行字符串来传递多个环境变量。例如:

minio_extra_vars: |
  MINIO_BROWSER_REDIRECT_URL=https://minio.example.com
  MINIO_SERVER_URL=https://s3.example.com

minio_provision

参数名称: minio_provision, 类型: bool, 层次:G/C

是否执行 Silo 资源置备任务?默认为 true

当启用时,Pigsty 将自动创建 minio_bucketsminio_users 中定义的存储桶和用户。 如果您不需要自动置备这些资源,可以将此参数设置为 false


minio_alias

参数名称: minio_alias, 类型: string, 层次:G

本地 Silo 集群的 mcli 客户端别名,默认值为 sss

启用 minio_provision 时,此别名会写入所有 Infra 节点与 Silo 成员上 Ansible 执行用户的 mcli 配置文件(~/.mcli/config.json);分组重叠的节点不会重复写入。 随后可以直接使用 mcli <alias> 命令访问 Silo,例如 mcli ls sss/

如果部署多个 Silo 集群,需要为每个集群指定不同的别名以避免冲突。


minio_endpoint

参数名称:minio_endpoint, 类型: string, 层次:C

部署的客户端别名对应的端点。如果指定,minio_endpoint(例如 https://sss.pigsty:9002)会替代自动拼接的 <scheme>://<minio_domain>:<minio_port>,作为 Infra 节点与 Silo 成员上客户端别名的目标端点。

mcli alias set {{ minio_alias }} {% if minio_endpoint is defined and minio_endpoint != '' %}{{ minio_endpoint }}{% else %}{% if minio_https|bool %}https{% else %}http{% endif %}://{{ minio_domain }}:{{ minio_port }}{% endif %} {{ minio_access_key }} {{ minio_secret_key }}

以上命令由角色以 Ansible 执行用户身份,在 Infra 节点与 Silo 成员上执行。


minio_buckets

参数名称: minio_buckets, 类型: bucket[], 层次:C

默认创建的 Silo 存储桶列表:

minio_buckets:
  - { name: pgsql }
  - { name: meta ,versioning: true }
  - { name: data }

默认创建三个存储桶,各有不同的用途和策略:

  • pgsql 存储桶:默认用于 PostgreSQL 的 pgBackREST 备份存储。
  • meta 存储桶:开放式存储桶,启用了版本控制(versioning),适合存储需要版本管理的重要元数据。
  • data 存储桶:开放式存储桶,用于其他用途,例如 Supabase 模板可能使用此存储桶存储业务数据。

每个存储桶都会创建一个同名的访问策略,例如 pgsql 策略拥有对 pgsql 存储桶的所有权限,以此类推。

您还可以在存储桶定义中添加 lock 标志,启用对象锁定功能,防止存储桶中的对象被意外删除。


minio_users

参数名称: minio_users, 类型: user[], 层次:C

要创建的 Silo 用户列表,默认值:

minio_users:
  - { access_key: pgbackrest  ,secret_key: S3User.Backup ,policy: pgsql }
  - { access_key: s3user_meta ,secret_key: S3User.Meta   ,policy: meta  }
  - { access_key: s3user_data ,secret_key: S3User.Data   ,policy: data  }

默认配置会创建三个用户,分别对应三个默认存储桶:

  • pgbackrest:用于 PostgreSQL pgBackREST 备份,拥有 pgsql 存储桶的访问权限。
  • s3user_meta:用于访问 meta 存储桶。
  • s3user_data:用于访问 data 存储桶。
使用默认密码是高危行为!请务必在您的部署中调整这些凭证!

提示:./configure -g 会默认修改配置文件模板中的这些密码,如果这些默认密码出现在模版文件中。


MINIO_REMOVE

本节包含 minio_remove 角色的参数, 这些是 minio-rm.yml 剧本使用的操作标志参数。

minio_safeguard

参数名称: minio_safeguard, 类型: bool, 层次:G/C/A

防止意外删除的保险开关,默认值为 false

如果启用此参数,minio-rm.yml 剧本将中止并拒绝移除 Silo 集群,从而提供防止意外删除的保护。

建议在生产环境中启用此保险开关,防止误操作导致数据丢失:

minio_safeguard: true   # 启用后,minio-rm.yml 将拒绝执行

minio_rm_data

参数名称: minio_rm_data, 类型: bool, 层次:G/C/A

移除时是否删除 Silo 数据与配置?默认值为 true

启用后,minio-rm.yml 会删除数据目录、/etc/default/silo.minio 用户目录,以及 /etc/systemd/system/silo.service。设置为 false 会保留这些数据与配置,但不会阻止服务注销、停止和禁用。


minio_rm_pkg

参数名称: minio_rm_pkg, 类型: bool, 层次:G/C/A

移除时是否卸载 Silo 软件包?默认值为 false

启用后,minio-rm.yml 会卸载 silomcli。默认禁用此选项,以便保留软件包供后续使用。

4 - 预置剧本

使用预置 Ansible 剧本部署或移除 Silo 对象存储集群。

MINIO 模块提供两个内置剧本:


minio.yml

minio.ymlhosts: all 运行,但会在预任务阶段跳过没有定义 minio_cluster 的主机。进入角色后还会校验:

  • minio_cluster 已定义且非空
  • minio_seq 已定义且为非负整数
  • minio_type 必须等于 silo

因此,minio_cluster 是模块成员门控,而 minio_seqminio_type 的错误会让身份校验明确失败。不要在 all.vars 中定义 minio_cluster

主要任务标签如下:

  • minio-id:校验身份,并按 minio_cluster 从整个清单计算实际成员、节点名与卷参数
  • minio_install:创建 minio OS 用户,安装 Silo 与 mcli,准备数据目录
    • minio_os_user
    • minio_pkg
    • minio_dir
  • minio_config:渲染 /etc/default/silo/etc/systemd/system/silo.service、证书和 DNS
    • minio_conf
    • minio_cert
    • minio_dns
  • minio_launch:启动或重启 silo.service
  • minio_register:写入 VictoriaMetrics FileSD 目标
  • minio_provision:由集群首个成员执行一次 mcli 别名、存储桶与用户置备

重新执行 minio.yml 可能重启正在运行的对象存储服务,但不会主动重建数据。生产环境应按集群故障预算安排执行窗口。


minio-rm.yml

minio-rm.yml 使用相同的 minio_cluster 成员门控和身份校验,并执行:

  • minio_safeguard:防误删检查,默认 false
  • minio_pause:暂停 3 秒,允许 Ctrl+C 中止
  • minio_deregister:删除 VictoriaMetrics 目标与 DNS 记录
  • minio_svc:停止并禁用 Silo 服务
  • minio_data:按 minio_rm_data 删除数据与配置
  • minio_pkg:按 minio_rm_pkg 卸载 Silo 与 mcli
危险操作

minio_rm_data 默认为 true。完整执行移除剧本会删除展开后的所有 minio_data 目录;运行前必须核对 minio_clusterminio_seqminio_type: silo 与磁盘挂载路径。只想退役服务并保留数据时,请显式设置 -e minio_rm_data=false

部署与移除角色都默认 minio_type: silo,其他取值会被拒绝。下面的删除示例仍显式传入该值,作为复核软件包、服务、证书目录和数据路径的一部分;它不是额外的交互确认门。


命令速查

./minio.yml -l <group>                         # 部署该限域内具有 minio_cluster 身份的成员
./minio.yml -l minio -t minio_install         # 安装 Silo 与 mcli,准备目录
./minio.yml -l minio -t minio_config          # 重新渲染配置、证书和 DNS
./minio.yml -l minio -t minio_launch          # 重启 Silo 服务
./minio.yml -l minio -t minio_register        # 刷新监控目标
./minio.yml -l minio -t minio_provision       # 重新置备别名、存储桶和用户

./minio-rm.yml -l minio -e minio_type=silo                         # 移除 Silo 服务、配置与数据
./minio-rm.yml -l minio -e minio_type=silo -e minio_rm_data=false  # 移除服务但保留数据和配置
./minio-rm.yml -l minio -e minio_type=silo -e minio_rm_pkg=true    # 同时卸载 Silo 与 mcli

如果配置组名与 minio_cluster 不同,-l 使用的是 Ansible 分组或主机模式,而不是逻辑集群名;请用能覆盖完整目标成员的限域表达式。


保护机制

生产集群建议在集群变量中启用防误删保险:

minio_safeguard: true

确需销毁时,可在充分核对目标和备份后显式覆盖:

./minio-rm.yml -l minio -e minio_type=silo -e minio_safeguard=false

执行演示

asciicast

5 - 管理预案

Silo 对象存储集群的创建、销毁、升级、扩缩容与故障处理。

创建集群

要创建一个集群,在配置清单中定义好后,执行 minio.yml 剧本即可。

minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio, minio_type: silo } }

例如,上面的配置定义了一个 SNSD 单机单盘 Silo 集群,使用以下命令即可创建所选对象存储集群:

./minio.yml -l minio  # 在 minio 分组上安装 Silo

销毁集群

要销毁一个集群,执行专用的 minio-rm.yml 剧本即可:

./minio-rm.yml -l minio -e minio_type=silo                         # 移除 Silo 集群
./minio-rm.yml -l minio -e minio_type=silo -e minio_rm_data=false  # 移除集群但保留数据与配置
./minio-rm.yml -l minio -e minio_type=silo -e minio_rm_pkg=true    # 移除集群并卸载软件包

删除角色也将 minio_type 默认为 silo,当前其他取值会被拒绝。

架构变更:Pigsty v3.6+

从 Pigsty v3.6 开始,集群移除操作已从 minio.yml 剧本迁移至专用的 minio-rm.yml 剧本。旧的 minio_clean 任务已被弃用。

移除剧本会依次尝试以下操作:

  • 从 VictoriaMetrics 监控系统中注销对象存储目标
  • 从 INFRA 节点的 DNS 服务中移除记录
  • 停止并禁用 silo.service
  • 删除数据目录和 Silo 配置(由 minio_rm_data 控制,默认执行)
  • 卸载 Silo 与 mcli 软件包(由 minio_rm_pkg 控制,默认不执行)

该剧本启用了错误容忍,返回状态不能单独证明服务、数据、DNS 与监控目标已经全部按预期处理;真实运行后应逐项核对现场。


集群扩容

本节使用 Silo 保留的 MinIO 兼容管理接口。生产操作前必须按实际 Silo 版本核对上游约束并完成专项演练。

Silo 不能直接改变既有存储池的节点或磁盘数量,但可以通过新增存储池扩容。

假设您有 这样一个 四节点 Silo 集群,希望通过新增四节点存储池将容量扩展一倍。

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 , nodename: minio-1 }
    10.10.10.11: { minio_seq: 2 , nodename: minio-2 }
    10.10.10.12: { minio_seq: 3 , nodename: minio-3 }
    10.10.10.13: { minio_seq: 4 , nodename: minio-4 }
  vars:
    minio_type: silo
    minio_cluster: minio
    minio_data: '/data{1...4}'
    minio_buckets: [ { name: pgsql }, { name: infra }, { name: redis } ]
    minio_users:
      - { access_key: dba , secret_key: S3User.DBA, policy: consoleAdmin }
      - { access_key: pgbackrest , secret_key: S3User.SomeNewPassWord , policy: readwrite }

    # bind a node l2 vip (10.10.10.9) to minio cluster (optional)
    node_cluster: minio
    vip_enabled: true
    vip_vrid: 128
    vip_address: 10.10.10.9
    vip_interface: eth1

    # expose minio service with haproxy on all nodes
    haproxy_services:
      - name: minio                    # [REQUIRED] service name, unique
        port: 9002                     # [REQUIRED] service port, unique
        balance: leastconn             # [OPTIONAL] load balancer algorithm
        options:                       # [OPTIONAL] minio health check
          - option httpchk
          - option http-keep-alive
          - http-check send meth OPTIONS uri /minio/health/live
          - http-check expect status 200
        servers:
          - { name: minio-1 ,ip: 10.10.10.10 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-2 ,ip: 10.10.10.11 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-3 ,ip: 10.10.10.12 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
          - { name: minio-4 ,ip: 10.10.10.13 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

首先,修改 Silo 集群定义,新增四台节点,按顺序分配序列号 5 到 8。 这里的关键一步是修改 minio_volumes 参数,将新的四个节点指定为一个新的 存储池

minio:
  hosts:
    10.10.10.10: { minio_seq: 1 , nodename: minio-1 }
    10.10.10.11: { minio_seq: 2 , nodename: minio-2 }
    10.10.10.12: { minio_seq: 3 , nodename: minio-3 }
    10.10.10.13: { minio_seq: 4 , nodename: minio-4 }
    # 新增的四个节点
    10.10.10.14: { minio_seq: 5 , nodename: minio-5 }
    10.10.10.15: { minio_seq: 6 , nodename: minio-6 }
    10.10.10.16: { minio_seq: 7 , nodename: minio-7 }
    10.10.10.17: { minio_seq: 8 , nodename: minio-8 }

  vars:
    minio_type: silo
    minio_cluster: minio
    minio_data: '/data{1...4}'
    minio_volumes: 'https://minio-{1...4}.pigsty:9000/data{1...4} https://minio-{5...8}.pigsty:9000/data{1...4}'  # 新增的集群配置
    # …… 省略其他配置

第二步,将这些节点交由 Pigsty 纳管:

./node.yml -l 10.10.10.14,10.10.10.15,10.10.10.16,10.10.10.17

第三步,在新节点上使用 Ansible 剧本 安装并准备 Silo:

./minio.yml -l 10.10.10.14,10.10.10.15,10.10.10.16,10.10.10.17 -t minio_install

第四步,在 整个集群 上使用 Ansible 剧本 重新配置 Silo:

./minio.yml -l minio -t minio_config

这一步会更新现有四个节点的 MINIO_VOLUMES 配置

第五步,一次性重启整个 Silo 集群(请注意,不要滚动重启!):

./minio.yml -l minio -t minio_launch -f 10   # 最多 10 并发,确保 8 个节点同时重启

第六步(可选):如果您使用了负载均衡,那么请确保负载均衡器的配置也已经更新。例如,将新的四个节点加入到负载均衡器的配置中:

# expose minio service with haproxy on all nodes
haproxy_services:
  - name: minio                    # [REQUIRED] service name, unique
    port: 9002                     # [REQUIRED] service port, unique
    balance: leastconn             # [OPTIONAL] load balancer algorithm
    options:                       # [OPTIONAL] minio health check
      - option httpchk
      - option http-keep-alive
      - http-check send meth OPTIONS uri /minio/health/live
      - http-check expect status 200
    servers:
      - { name: minio-1 ,ip: 10.10.10.10 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-2 ,ip: 10.10.10.11 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-3 ,ip: 10.10.10.12 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-4 ,ip: 10.10.10.13 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

      - { name: minio-5 ,ip: 10.10.10.14 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-6 ,ip: 10.10.10.15 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-7 ,ip: 10.10.10.16 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
      - { name: minio-8 ,ip: 10.10.10.17 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

然后,执行 node.yml 剧本的 haproxy 子任务,更新负载均衡器配置:

./node.yml -l minio -t haproxy_config,haproxy_reload   # 更新负载均衡器配置并在线加载

如果您使用 L2 VIP 来确保可靠的负载均衡器接入,那么还需要将新的节点(如果有)加入到现有 NODE VIP 分组中:

./node.yml -l minio -t node_vip  # 刷新集群 L2 VIP 配置 

集群缩容

Silo 不能直接缩减既有存储池的节点或磁盘数量,但可以在存储池层次退役:先新增存储池,将旧池数据排干迁移,再退役旧池。


集群升级

首先,将新版 silomcli 软件包下载至 INFRA 节点的本地软件仓库,然后使用 SOW 重建仓库索引:

./infra.yml -t repo_create

其次,升级 Silo 服务端与 mcli 兼容客户端:

ansible minio -m package -b -a 'name=silo state=latest'  # 服务端
ansible minio -m package -b -a 'name=mcli state=latest'  # 兼容客户端

最后,使用角色重启完整 Silo 集群:

./minio.yml -l minio -t minio_config,minio_launch

软件包升级与从旧 MinIO 迁移到 Silo 是两件事。前者针对已经运行 Silo 的集群;后者必须另行完成数据兼容性验证、备份、停机窗口与回滚演练,不能直接套用本节的升级命令。


替换故障节点

# 1. 从集群中下线故障节点
bin/node-rm <your_old_node_ip>

# 2. 替换故障节点,保留原节点名称(如果 IP 变化,需要修改 Silo 集群定义)
bin/node-add <your_new_node_ip>

# 3. 在新节点上安装配置 Silo
./minio.yml -l <your_new_node_ip>

# 4. 指示 Silo 执行恢复动作
mcli admin heal

替换故障磁盘

# 1. 从集群中删除故障磁盘
umount /dev/<your_disk_device>

# 2. 替换故障磁盘,使用xfs格盘
mkfs.xfs /dev/sdb -L DRIVE1

# 3. 不要忘记设置开机自动挂载
vi /etc/fstab
# LABEL=DRIVE1     /mnt/drive1    xfs     defaults,noatime  0       2

# 4. 重新挂载
mount -a

# 5. 指示 Silo 执行恢复动作
mcli admin heal

管理 Silo 密码

minio_secret_key(默认 S3User.MinIO)是 Silo root 用户密码,渲染到 /etc/default/silo

修改密码后,使用以下命令刷新配置并重启服务(需同时重启整个集群):

./minio.yml -l minio -t minio_config,minio_launch,minio_alias -f 30  # 重新渲染配置文件,写入 Alias

如果要修改 Silo 普通用户的密码,例如 pgbackrest,请在可以访问 Silo 的节点上执行:

set +o history
mcli admin user passwd sss pgbackrest <YOUR_NEW_PASSWORD>
set -o history

然后还要修改引用该用户密码的所有配置。例如,当 pgBackRest 使用 minio S3 兼容仓库预设时,需要同步更新访问密钥密码:

./pgsql.yml -t pgbackrest_config

6 - 监控告警

Pigsty 如何监控 Silo,包括 Metrics V3 指标入口、Grafana 面板和告警规则。

管理界面

Silo 默认通过 minio_admin_port9001)提供管理界面,可直接访问 https://<node-ip>:9001

部分配置模板还会通过 m.pigsty 暴露管理入口。登录凭证由 minio_access_keyminio_secret_key 指定。

HTTPS 与证书信任

对象存储默认使用 Pigsty CA 签发的 HTTPS 证书。浏览器和容器客户端必须信任该 CA;生产环境不要以忽略证书校验代替正确配置证书信任。


采集链路

Silo 沿用 job="minio"clsinsipinstance 这组稳定身份标签,并使用 flavor="silo"

后端 指标链路 目标与标签
Silo VictoriaMetrics 拉取 https://<instance>:9000/minio/metrics/v3 job=minioflavor=silo

每个实例的 FileSD 目标写入 /infra/targets/minio/<minio_cluster>-<minio_seq>.yml

Silo 只注册一个 Metrics V3 根端点。该端点同时提供集群、系统、API 与聚合用量指标;Pigsty 会丢弃 bucket 标签非空的样本,不再单独注册按桶和复制端点,以控制时序基数。


Grafana 面板

Pigsty 提供 MinIO Overview / MinIO Instance 两个兼容命名的面板,用于展示 Silo Metrics V3 指标、系统日志与实例状态。

minio-overview.jpg


告警规则

当前 files/victoria/rules/minio.yml 为 Silo 定义了五条告警:

告警 条件摘要 级别
MinioServerDown minio_up < 1 持续 1 分钟 CRIT
MinioNodeOffline 5 分钟平均离线节点数大于 0,持续 3 分钟 WARN
MinioDiskOffline 5 分钟平均离线磁盘数大于 0,持续 3 分钟 WARN
MinioErasureSetUnhealthy 任一纠删码集合总体健康值小于 1,持续 1 分钟 CRIT
MinioClusterCapacityHigh 可用容量使用率超过 90%,持续 15 分钟 WARN

关键表达式使用 Metrics V3 指标名:

minio_up < 1

max by (cls) (
  avg_over_time(minio_cluster_health_nodes_offline_count{job="minio"}[5m])
) > 0

max by (cls) (
  avg_over_time(minio_cluster_health_drives_offline_count{job="minio"}[5m])
) > 0

min by (cls) (
  minio_cluster_erasure_set_overall_health{job="minio"}
  or (minio_cluster_erasure_set_overall_write_quorum{job="minio"} * 0)
) < 1

max by (cls) (
  1 - (
    (minio_cluster_health_capacity_usable_free_bytes{job="minio"}
     or (minio_cluster_health_capacity_usable_total_bytes{job="minio"} * 0))
    / minio_cluster_health_capacity_usable_total_bytes{job="minio"}
  )
) > 0.90

7 - 指标列表

Pigsty MINIO 模块监控 Silo 使用的 Metrics V3 接口、关键指标和稳定标签。

MINIO 模块通过 /minio/metrics/v3 采集 Silo 指标。指标集合会随服务端版本和实际启用功能变化,因此本页列出当前仪表盘与告警依赖的稳定接口,不把某个版本的完整抓取快照当作长期契约。


稳定身份标签

所有对象存储目标都使用以下 Pigsty 标签:

标签 含义 示例
job 固定模块命名空间 minio
flavor 实际后端 silo
cls minio_cluster 集群标识 minio
ins <minio_cluster>-<minio_seq> 实例标识 minio-1
ip 清单管理地址 10.10.10.10
instance 指标目标地址 10.10.10.10:9000

查询与记录规则应优先使用 clsinsip 这些稳定身份标签。


Silo Metrics V3

每个 Silo 实例只抓取 V3 根端点 /minio/metrics/v3。当前关键指标如下:

类别 关键指标 含义
存活 minio_up Pigsty 对该实例的抓取/健康状态
节点 minio_cluster_health_nodes_online_countminio_cluster_health_nodes_offline_count 在线与离线节点数
磁盘 minio_cluster_health_drives_online_countminio_cluster_health_drives_offline_count 在线与离线磁盘数
容量 minio_cluster_health_capacity_raw_total_bytes 原始总容量
容量 minio_cluster_health_capacity_usable_total_bytesminio_cluster_health_capacity_usable_free_bytes 可用总容量与剩余容量
对象 minio_cluster_usage_objects_countminio_cluster_usage_objects_total_bytes 对象数量与使用字节数
存储桶 minio_cluster_usage_objects_buckets_count 聚合存储桶数量
纠删码 minio_cluster_erasure_set_overall_healthminio_cluster_erasure_set_overall_write_quorum 纠删码集合健康与写入法定人数
API minio_api_requests_totalminio_api_requests_errors_totalminio_api_requests_4xx_errors_total API 请求与错误计数
API minio_api_requests_inflight_totalminio_api_requests_incoming_total 并发与进入请求
流量 minio_api_requests_traffic_received_bytesminio_api_requests_traffic_sent_bytes 收发字节数
延迟 minio_api_requests_ttfb_seconds_distribution 首字节延迟分布
进程 minio_system_process_cpu_total_secondsminio_system_process_resident_memory_bytes 进程 CPU 与常驻内存
系统 minio_system_drive_free_bytesminio_system_drive_used_bytesminio_system_drive_health 单盘容量与健康状态
审计 minio_audit_total_messages 审计消息计数

Pigsty 在抓取阶段丢弃 bucket 标签非空的样本,并且不注册专用 per-bucket 与 replication 端点。这是刻意的基数控制策略;如果业务确实需要逐桶指标,应单独评估时序规模后自行增加采集任务。

8 - 常见问题

Pigsty MINIO 对象存储模块常见问题答疑

MINIO 模块默认部署哪个引擎?

v4.5.0 当前源码部署并且只部署 Silo,minio_type 唯一合法值是 silo。MINIO 是兼容模块名,不表示运行 MinIO 服务端。

  • 新建集群建议显式写出 minio_type: silo
  • minio_type: miniominio_type: rustfs 都会在身份检查阶段失败。
  • 外部 MinIO、RustFS 或其他 S3 服务仍可作为 pgBackRest 仓库,但不由当前 MINIO 角色管理。
  • 升级由旧版本管理的 MinIO 集群前,必须先验证 MinIO → Silo 的数据兼容性、备份和回滚流程。

Pigsty 仓库为什么仍有 MinIO 或 RustFS 软件包?

MinIO 上游在 2025-10-15 改为仅分发源码,在 2025-12-03 将代码库标记为维护模式,并于 2026-04-25 归档仓库。这里的“仅分发源码”是停止提供新的社区预编译二进制,而不只是停止 RPM/DEB。

Pigsty 因此曾维护自己的 MinIO 分支 与软件包。MinIO CVE-2025-62506 影响 RELEASE.2025-10-15T17-29-55Z 之前的版本,并在该版本修复;Pigsty 后续 MinIO 分支和当前 Silo 代码都包含这一修复。

您仍可以在 Pigsty Infra 仓库中找到 MinIO/RustFS 的 RPM/DEB 包以及构建脚本,但“仓库提供软件包”不等于“v4.5 MINIO 模块支持该后端”。当前角色只接受 Silo;其他服务需要自行部署和维护。


为什么对象存储默认启用 HTTPS?

Pigsty 默认的 pgBackRest minio 仓库配置使用 HTTPS,并通过 /etc/pki/ca.crt 校验证书,以保护备份流量。pgBackRest 并非绝对禁止 HTTP;如果明确选择 HTTP,除了关闭 minio_https,还必须同步修改 pgbackrest_repo 的 TLS 选项,不能只改服务端开关。


从容器中访问 Silo 提示证书无效?

对象存储服务端证书默认由 Pigsty 私有 CA 签发;它不是服务端自签名证书,但容器镜像通常不信任这套私有 CA,因此 mcli、rclone、AWS CLI 等客户端会提示证书链无效。

例如,对于 Node.js 应用程序,可以把 Pigsty CA 证书挂载到容器内,并通过环境变量 NODE_EXTRA_CA_CERTS 指定路径:

    environment:
      NODE_EXTRA_CA_CERTS: /etc/pki/ca.crt
    volumes:
      - /etc/pki/ca.crt:/etc/pki/ca.crt:ro

如果 Silo 没有用作 pgBackRest 备份仓库,也可以选择关闭 HTTPS、改用 HTTP;同时应评估明文传输风险。


Silo 数据目录可以使用普通目录吗?

minio_data 填写的是目录路径,不是裸磁盘设备。/data/minio 可以是普通子目录,但在多节点或多盘部署中,它背后必须是非根盘的独立持久文件系统。

  • 如果 /data 已经挂载到独立本地盘、云盘、分区或 LVM 逻辑卷,那么 /data/minio 可以直接使用。
  • 如果 /data/minio 只是根文件系统 / 下创建的目录,分布式 Silo 会将其标记为根盘并拒绝使用,错误为 drive is part of root drive, will not be used
  • 单机多盘的每个路径都应对应独立文件系统,不能用同一块盘上的多个目录模拟多盘。
  • 只有 单机单盘 模式可以直接使用根文件系统中的普通目录,且仅适合开发测试或非关键场合。

使用下面的命令检查实际挂载点:

findmnt -T /
findmnt -T /data/minio

详细说明参见 集群配置:存储路径与挂载;三节点单盘拓扑参见 多机单盘


如何向已有的 Silo 集群中添加新的成员?

在部署之前应规划好 Silo 集群容量,因为新增存储池需要全局重启。

可以通过为现有集群增加一组服务器节点,创建新的存储池来扩容。

不能直接修改既有存储池的节点数与磁盘数,只能通过添加新存储池扩容。

详细步骤请参考 Pigsty 文档:集群扩容,以及 MinIO 官方文档:扩展 MinIO 部署


如何移除 Silo 集群?

从 Pigsty v3.6 开始,移除 MinIO 集群需要使用专用的 minio-rm.yml 剧本:

./minio-rm.yml -l minio -e minio_type=silo                         # 移除 Silo 集群
./minio-rm.yml -l minio -e minio_type=silo -e minio_rm_data=false  # 移除集群但保留数据

删除角色也把 minio_type 默认为 silo,其他取值会被拒绝。示例仍显式写出该值,方便删除前连同集群身份和路径一起复核。

minio_rm_data 默认为 true,而移除角色会容忍部分清理错误。真实执行前应核对精确的 -l 目标和近期备份,执行后再检查服务、数据目录、DNS 与监控目标,不能只凭剧本返回状态判断清理完成。

如果您启用了 minio_safeguard 保护,需要显式覆盖才能执行移除:

./minio-rm.yml -l minio -e minio_type=silo -e minio_safeguard=false

mcli 命令与 mc 命令有什么区别?

Pigsty 将兼容的 MinIO 客户端以 mcli 命令和软件包名交付,而不是使用上游的 mc 名称,从而避免与同名的 Midnight Commander 文件管理器冲突。

mcli 是 Pigsty 对兼容客户端的交付名称,CLI 接口沿用 mc;具体版本仍可能随 Pigsty 打包更新。您可以在 MinIO 客户端文档 中查阅命令参考。


如何监控 Silo 集群状态?

Pigsty 为 Silo 提供了开箱即用的监控能力;面板与指标仍保留 MinIO 兼容命名:

  • Grafana 面板MinIO OverviewMinIO Instance
  • 告警规则:包括 MinIO 宕机、节点离线、磁盘离线等告警
  • Silo 内置控制台:通过 https://<minio-ip>:9001 访问

详情请参阅 监控告警 文档