这是本节的多页打印视图。 .
模块:MINIO
MINIO 是 Pigsty 中 S3 兼容对象存储的兼容模块名。当前角色部署 Silo,并且 minio_type 只接受 silo。
Silo 沿用 MinIO 的 S3/Admin API、MINIO_* 环境变量、磁盘格式与 mcli 客户端接口,可用作 PostgreSQL pgBackRest 备份仓库。模块名、参数前缀和监控 job 继续使用 MINIO / minio_*,以保持现有清单和运维入口兼容。
minio 与 rustfs 不再是有效的 minio_type,会在身份检查阶段失败。升级由旧版本管理的 MinIO 集群前,必须先完成备份、MinIO → Silo 兼容性验证与回滚演练;不能把软件包替换当作已经验收的数据迁移。外部 MinIO、RustFS 或其他 S3 服务仍可作为 pgBackRest 仓库,但不由当前 MINIO 角色管理。
MINIO 是 可选模块。若将它用作 pgBackRest 的 S3 仓库,应在 PGSQL 模块之前部署;TLS 证书与主机基线由 NODE / CA 能力提供。
快速开始
以下配置显式定义一个单节点 Silo 集群。minio_cluster 与 minio_seq 都是必填身份参数;生产清单应显式写出 minio_type: silo。
清单分组名可以与 minio_cluster 不同,角色按每台主机的 minio_cluster 身份计算实际成员。不要在 all.vars 中定义 minio_cluster,否则所有主机都会被视为对象存储成员。
部署完成后可通过以下入口访问:
- S3 API:
https://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 - 使用方法
当您 配置 并执行 剧本 部署 Silo 后,可以参考本页通过 S3 与 mcli 兼容接口使用它。
部署集群
首先在 配置清单 中定义单机单盘对象存储集群,并显式锁定引擎:
然后,针对定义的分组(这里为 minio)执行 Pigsty 提供的 minio.yml 剧本即可:
请注意在 deploy.yml 中,事先定义好的 Silo 集群会自动创建,无需手动再次执行 minio.yml 剧本。
生产多节点部署应通读 Pigsty 配置文档,并核对实际 Silo 版本的操作约束。
接入集群
生产环境建议通过域名与 HTTPS 访问对象存储(默认配置也是 HTTPS)。
如果您显式设置 minio_https 为 false,也可以使用 HTTP 访问。
无论哪种方式,都请确保对象存储服务域名(默认为 sss.pigsty)正确指向服务节点或负载均衡器。
- 您可以在
node_etc_hosts中添加静态解析记录,或者手工修改/etc/hosts文件 - 您可以在内网的 DNS 服务器上添加一条记录,如果已经有了现成的 DNS 服务
- 如果您启用了 Infra 节点上的 DNS 服务器,可以在
dns_records中添加记录
生产环境通常建议使用第一种方式:静态 DNS 解析记录,避免对象存储服务依赖动态 DNS。
应将 S3 服务域名指向 Silo 节点或负载均衡器的 IP 地址与服务端口。
Pigsty 默认使用 sss.pigsty 作为 S3 服务域名,并在 9000 端口提供服务;角色不会自动为 minio_domain 创建全局 DNS 解析,需要按上文显式配置。
部分示例在 Silo 集群上部署 HAProxy 对外暴露服务,此时模板使用 9002 作为统一服务端口。
添加别名
要使用 mcli 客户端访问 minio 服务器集群,首先要配置服务器的别名(alias):
完整执行 minio.yml 且启用 minio_provision 后,角色会为所有 Infra 节点与按 minio_cluster 发现的实际对象存储成员上的 Ansible 执行用户配置默认别名;同一主机同时属于两者时只写入一次。
MinIO 客户端工具 mcli 的完整功能参考,请查阅文档: MinIO 客户端。
上述示例中的密码 S3User.MinIO 是 Pigsty 的默认值。如果您在部署时修改了 minio_secret_key,请使用您实际配置的密码。
用户管理
使用 mcli 可以管理 Silo 中的业务用户。默认置备已经创建 pgbackrest、s3user_meta 与 s3user_data;下面创建一个额外用户,并附加默认生成的 data 桶策略:
存储桶管理
您可以对 Silo 中的存储桶进行增删改查:
对象管理
您也可以对存储桶内的对象进行增删改查,详情请参考官方文档:对象管理
使用rclone
Pigsty 仓库中提供了 rclone,一个方便的多云对象存储客户端,可以用它访问 Silo 服务。
如果 Silo 使用 HTTPS(默认配置),需要确保客户端信任 Pigsty CA 证书(/etc/pki/ca.crt),或者在 rclone 配置中添加 no_check_certificate = true 跳过证书验证(不建议在生产环境使用)。
配置备份仓库
在 Pigsty 中,MINIO 模块的主要用例是作为 pgBackRest 的 S3 备份仓库。
当您将 pgbackrest_method 设为 minio 时,PGSQL 模块会使用同名的 S3 兼容仓库预设;MINIO 模块部署的 Silo 可以直接使用该预设。
如果使用多节点 Silo 集群并通过负载均衡器对外提供服务,需要相应修改这里的 s3_endpoint 与 storage_port。
2 - 集群配置
在部署 MINIO 模块之前,需要在 配置清单 中定义 Silo 对象存储集群。当前角色要求 minio_type: silo,支持以下清单部署模式:
- 单机单盘:SNSD:单机单盘模式,可以使用任意目录作为数据盘,仅作为开发、测试、演示使用。
- 单机多盘:SNMD:折中模式,在单台服务器上使用多块磁盘 (>=2),仅当资源极为有限时使用。
- 多机单盘:MNSD:多台服务器各使用一个独立数据盘,提供紧凑的节点级高可用能力。
- 多机多盘:MNMD:多机多盘模式,标准生产环境部署,具有最好的可靠性,但需要多台服务器。
SNSD 适合开发测试,三节点 MNSD 适合资源受限的紧凑高可用部署,MNMD 适合对容量、吞吐和磁盘冗余有更高要求的生产环境。SNMD 只解决单机内的磁盘故障,不能容忍整机故障。
此外,Silo 可以使用 多池部署 扩容,或直接部署 多套集群。
使用多节点集群时,访问任意成员都可以获取 S3 服务,因此最佳实践是在集群前使用负载均衡与 高可用服务接入机制。
后端选择
minio_type 是为后续扩展保留的选择器,但当前部署与移除角色都只接受 silo。它对应 silo 软件包、silo.service、/etc/default/silo 与 ~/.minio/certs/。为支持原地迁移,silo.service 会先读取旧的 /etc/default/minio,再读取优先级更高的 /etc/default/silo,并与旧 minio.service 冲突;新部署只应维护 Silo 配置文件。
旧清单中的 minio_type: minio 或 minio_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 只是 / 下的普通目录,则不满足分布式部署要求。绑定挂载根文件系统中的另一个目录也不会形成新的磁盘故障域。
可以在部署前检查实际挂载关系:
第二条命令应显示 /data 或 /data/minio 对应的独立挂载点,而不是 /。生产环境还应确保挂载写入 /etc/fstab 或由等效的持久化机制管理,并为同一存储池使用容量接近的数据盘。
单机单盘
SNSD 模式,兼容拓扑参考:MinIO 单机单盘部署
在 Pigsty 中,定义一个单例 Silo 实例非常简单:
单机模式下,必要的身份参数是 minio_seq 和 minio_cluster,它们会唯一标识每一个对象存储实例。
单节点单磁盘模式仅用于开发目的,因此您可以使用一个普通的目录作为数据目录,该目录由参数 minio_data 默认为 /data/minio。
使用 Silo 时,强烈建议通过静态解析的域名记录访问服务。例如,假设 minio_domain 使用默认的 sss.pigsty,
那么您可以在所有节点上添加一个静态解析,便于其他节点访问此服务。
单节点单盘模式应当仅用于开发、测试、演示目的,因为它无法容忍任何硬件故障,也无法带来多磁盘的性能改善。生产环境请使用 多机多盘 模式。
单机多盘
SNMD 模式,兼容拓扑参考:MinIO 单机多盘部署
要在单节点上使用多块磁盘,所需的操作与 单机单盘 基本一致,但用户需要以 {{ prefix }}{x...y} 的特定格式指定 minio_data,该格式定义了序列磁盘挂载点。
SNMD 模式中的每个数据路径都必须位于独立文件系统上。如果多个路径实际落在同一个文件系统中,Silo 会拒绝把它们作为多块盘使用。生产环境建议使用 XFS;Vagrant 在 XFS 工具不可用时也支持以 ext4 准备测试数据盘。
例如 Vagrant 对象存储 沙箱 定义了一个带有 4 块磁盘的单节点 Silo 集群:/data1、/data2、/data3 和 /data4。启动 Silo 前,需要正确挂载并使用 xfs 格式化这些磁盘:
挂载磁盘属于服务器置备的部分,超出 Pigsty 的处理范畴。挂载的磁盘应该同时写入 /etc/fstab 以便在服务器重启后可以自动挂载。
SNMD 模式可以利用单机上的多块磁盘,提供更高的性能和容量,并且容忍部分磁盘故障。 但单节点模式无法容忍整个节点的故障,而且您无法在运行时添加新的节点,因此如果没有特殊原因,我们不建议在生产环境中使用 SNMD 模式。
多机单盘
MNSD 模式在多台服务器上各使用一个数据盘。以下配置定义了一个三节点单盘 Silo 集群,也是 ha/trio 使用的存储拓扑:
角色会生成 https://minio-{1...3}.pigsty:9000/data/minio。三条路径分别位于三台服务器上,每台服务器的 /data/minio 都必须落在非根盘的独立持久文件系统中。
三盘存储集默认使用 EC:1:每个对象拆分为 2 份数据和 1 份校验,读写仲裁都是 2,因此允许一个节点或一个数据盘不可用。使用容量相同的磁盘时,扣除文件系统与元数据开销前,可用容量约为原始容量的三分之二,并由最小磁盘容量限制。
这是资源占用较低的紧凑高可用拓扑,消除了单节点对象存储故障,但每个节点仍只有一个数据盘。需要更高容量、吞吐或节点内磁盘冗余时,应使用 多机多盘 模式。
既有单节点存储池不能通过直接增加两个成员原地改成三节点存储池。需要创建新的三节点集群、迁移对象并切换客户端入口。
多机多盘
MNMD 模式,兼容拓扑参考:MinIO 多机多盘部署
除了使用 单机多盘 模式中的 minio_data 指定磁盘,还需要使用 minio_node 指定多节点名称模式。
例如,以下配置定义了一个 Silo 集群,其中有四个节点,每个节点有四块磁盘:
minio_node 参数指定 MINIO 模块内部的节点名称模式,用于生成每个节点的唯一名称。
默认情况下,节点名称是 ${minio_cluster}-${minio_seq}.pigsty,其中 ${minio_cluster} 是集群名称,${minio_seq} 是节点序号。
实例名称会自动写入各 Silo 节点的 /etc/hosts 中进行静态解析,供集群成员互相识别和访问。
在这种情况下,派生的 minio_volumes 为 https://minio-{1...4}.pigsty:9000/data{1...4},以标识四个节点上的四块盘;角色再将其写入 Silo 使用的兼容环境变量。
您可以直接在对象存储集群中指定 minio_volumes,覆盖自动生成的值。
但通常不需要这样做,因为 Pigsty 会自动根据配置清单生成它。
多池部署
Silo 保留通过添加新存储池扩容的兼容能力。在 Pigsty 中,可以显式指定 minio_volumes 为每个存储池分配节点。
例如,假设您已经创建了 多机多盘 样例中的 Silo 集群,现在需要添加一个同样由四个节点构成的新存储池。
那么,你需要直接覆盖指定 minio_volumes 参数:
在这里,空格分隔的两个参数分别代表两个存储池,每个存储池有四个节点,每个节点有四块磁盘。更多信息见 管理预案:集群扩容。
多套集群
您可以将新节点部署为独立的 Silo 集群。以下配置使用不同身份声明两套对象存储集群:
minio_cluster 没有默认值,每套集群都必须显式定义。多集群共存时,还必须使用不同的 minio_alias、minio_domain 与 minio_endpoint,否则 Infra 节点上的共享客户端别名或域名会互相覆盖。Ansible 分组名可以与 minio_cluster 不同,角色按身份参数从整个清单发现成员。
服务接入
Silo 默认使用 9000 端口提供 S3 服务。多节点集群可以通过访问 任意一个成员 来访问服务。
服务接入属于 NODE 模块的功能范畴,这里仅做基本介绍。
多节点对象存储集群的高可用接入可以使用 L2 VIP 或 HAProxy 实现。例如,可用 keepalived 绑定 L2 VIP,或使用 NODE 模块提供的 haproxy 组件暴露 S3 服务。
例如,上面的配置块在 Silo 集群的所有节点上启用 HAProxy,通过 9002 端口暴露 S3 服务,并为集群绑定一个二层 VIP。
使用时应将 sss.pigsty 解析到 VIP 10.10.10.9,并通过 9002 端口访问。任意节点故障时,VIP 会切换到其他节点。
在这种情况下,还需要修改全局域名解析以及 minio_endpoint,更新写入管理节点的 mcli Alias 端点:
专用负载均衡
Pigsty 允许用户使用专用的负载均衡服务器组,而不是集群本身来运行 VIP 与 HAProxy。例如 ha/simu 模板中就使用了这种方式。
在这种情况下,还需要将 sss.pigsty 指向负载均衡器,并修改 minio_endpoint,更新管理节点上的 mcli Alias 端点:
访问服务
如果要从 PGSQL 访问上面通过 HAProxy 暴露的 Silo,可以在 pgbackrest_repo 中添加新的备份仓库定义:
暴露管控
Silo 默认通过 9001 端口(由 minio_admin_port 指定)提供 Web 管控界面。
将后台管理界面暴露给外部可能存在安全隐患。如果确实需要,请将 Silo 添加到 infra_portal 并刷新 Nginx 配置。
请 不要 在生产环境中暴露未加密的对象存储管控页面。
这意味着,通常需要在 DNS 服务器或本机 /etc/hosts 中添加 m.pigsty 解析记录,以便访问 Silo 管控页面。
与此同时,如果您使用的是 Pigsty 自签名的 CA 而不是一个正规的公共 CA,通常您还需要手工信任该 CA 或证书,才能跳过浏览器中的 “不安全” 提示信息。
3 - 参数列表
MINIO 模块共有 22 个公开参数,分为两个部分:
MINIO:19 个参数,用于部署 Silo 对象存储集群MINIO_REMOVE:3 个参数,控制对象存储集群的移除
自 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_volumes 与 minio_endpoint 为自动生成的参数,但您可以显式覆盖指定这两个参数。
默认参数
MINIO:19 个公开参数,定义于 roles/minio/defaults/main.yml
MINIO_REMOVE:3 个参数,定义于 roles/minio_remove/defaults/main.yml
MINIO
本节包含 minio 角色的参数,
这些是 minio.yml 剧本使用的操作标志参数。
minio_type
参数名称:minio_type,类型:enum,层次:G/C
保留的对象存储后端选择器,默认值与当前唯一合法值都是 silo。Silo 沿用 MinIO S3/Admin API、MINIO_* 环境变量与磁盘格式。
minio 与 rustfs 不再是有效取值,会在角色身份检查阶段失败。旧 MinIO 集群升级到 v4.5 前,必须独立验证备份、MinIO → Silo 数据兼容性与回滚方案;修改参数本身不会执行数据迁移。
部署与移除角色都将 minio_type 默认为 silo。执行 minio-rm.yml 时仍必须提供 minio_cluster 与 minio_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_alias、minio_domain、minio_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直接使用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_hosts
或 dns_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_provision
参数名称: minio_provision, 类型: bool, 层次:G/C
是否执行 Silo 资源置备任务?默认为 true。
当启用时,Pigsty 将自动创建 minio_buckets 和 minio_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 成员上客户端别名的目标端点。
以上命令由角色以 Ansible 执行用户身份,在 Infra 节点与 Silo 成员上执行。
minio_buckets
参数名称: minio_buckets, 类型: bucket[], 层次:C
默认创建的 Silo 存储桶列表:
默认创建三个存储桶,各有不同的用途和策略:
pgsql存储桶:默认用于 PostgreSQL 的 pgBackREST 备份存储。meta存储桶:开放式存储桶,启用了版本控制(versioning),适合存储需要版本管理的重要元数据。data存储桶:开放式存储桶,用于其他用途,例如 Supabase 模板可能使用此存储桶存储业务数据。
每个存储桶都会创建一个同名的访问策略,例如 pgsql 策略拥有对 pgsql 存储桶的所有权限,以此类推。
您还可以在存储桶定义中添加 lock 标志,启用对象锁定功能,防止存储桶中的对象被意外删除。
minio_users
参数名称: minio_users, 类型: user[], 层次:C
要创建的 Silo 用户列表,默认值:
默认配置会创建三个用户,分别对应三个默认存储桶:
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_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 会卸载 silo 与 mcli。默认禁用此选项,以便保留软件包供后续使用。
4 - 预置剧本
MINIO 模块提供两个内置剧本:
minio.yml:安装并配置 Silominio-rm.yml:移除 Silo、配置和可选数据
minio.yml
minio.yml 以 hosts: all 运行,但会在预任务阶段跳过没有定义 minio_cluster 的主机。进入角色后还会校验:
minio_cluster已定义且非空minio_seq已定义且为非负整数minio_type必须等于silo
因此,minio_cluster 是模块成员门控,而 minio_seq 与 minio_type 的错误会让身份校验明确失败。不要在 all.vars 中定义 minio_cluster。
主要任务标签如下:
minio-id:校验身份,并按minio_cluster从整个清单计算实际成员、节点名与卷参数minio_install:创建minioOS 用户,安装 Silo 与mcli,准备数据目录minio_os_userminio_pkgminio_dir
minio_config:渲染/etc/default/silo、/etc/systemd/system/silo.service、证书和 DNSminio_confminio_certminio_dns
minio_launch:启动或重启silo.serviceminio_register:写入 VictoriaMetrics FileSD 目标minio_provision:由集群首个成员执行一次mcli别名、存储桶与用户置备
重新执行 minio.yml 可能重启正在运行的对象存储服务,但不会主动重建数据。生产环境应按集群故障预算安排执行窗口。
minio-rm.yml
minio-rm.yml 使用相同的 minio_cluster 成员门控和身份校验,并执行:
minio_safeguard:防误删检查,默认falseminio_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_cluster、minio_seq、minio_type: silo 与磁盘挂载路径。只想退役服务并保留数据时,请显式设置 -e minio_rm_data=false。
部署与移除角色都默认 minio_type: silo,其他取值会被拒绝。下面的删除示例仍显式传入该值,作为复核软件包、服务、证书目录和数据路径的一部分;它不是额外的交互确认门。
命令速查
如果配置组名与 minio_cluster 不同,-l 使用的是 Ansible 分组或主机模式,而不是逻辑集群名;请用能覆盖完整目标成员的限域表达式。
保护机制
生产集群建议在集群变量中启用防误删保险:
确需销毁时,可在充分核对目标和备份后显式覆盖:
执行演示
5 - 管理预案
创建集群
要创建一个集群,在配置清单中定义好后,执行 minio.yml 剧本即可。
例如,上面的配置定义了一个 SNSD 单机单盘 Silo 集群,使用以下命令即可创建所选对象存储集群:
销毁集群
要销毁一个集群,执行专用的 minio-rm.yml 剧本即可:
删除角色也将 minio_type 默认为 silo,当前其他取值会被拒绝。
从 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 集群,希望通过新增四节点存储池将容量扩展一倍。
首先,修改 Silo 集群定义,新增四台节点,按顺序分配序列号 5 到 8。
这里的关键一步是修改 minio_volumes 参数,将新的四个节点指定为一个新的 存储池。
第二步,将这些节点交由 Pigsty 纳管:
第三步,在新节点上使用 Ansible 剧本 安装并准备 Silo:
第四步,在 整个集群 上使用 Ansible 剧本 重新配置 Silo:
这一步会更新现有四个节点的
MINIO_VOLUMES配置
第五步,一次性重启整个 Silo 集群(请注意,不要滚动重启!):
第六步(可选):如果您使用了负载均衡,那么请确保负载均衡器的配置也已经更新。例如,将新的四个节点加入到负载均衡器的配置中:
然后,执行 node.yml 剧本的 haproxy 子任务,更新负载均衡器配置:
如果您使用 L2 VIP 来确保可靠的负载均衡器接入,那么还需要将新的节点(如果有)加入到现有 NODE VIP 分组中:
集群缩容
Silo 不能直接缩减既有存储池的节点或磁盘数量,但可以在存储池层次退役:先新增存储池,将旧池数据排干迁移,再退役旧池。
集群升级
首先,将新版 silo 与 mcli 软件包下载至 INFRA 节点的本地软件仓库,然后使用 SOW 重建仓库索引:
其次,升级 Silo 服务端与 mcli 兼容客户端:
最后,使用角色重启完整 Silo 集群:
软件包升级与从旧 MinIO 迁移到 Silo 是两件事。前者针对已经运行 Silo 的集群;后者必须另行完成数据兼容性验证、备份、停机窗口与回滚演练,不能直接套用本节的升级命令。
替换故障节点
替换故障磁盘
管理 Silo 密码
minio_secret_key(默认 S3User.MinIO)是 Silo root 用户密码,渲染到 /etc/default/silo。
修改密码后,使用以下命令刷新配置并重启服务(需同时重启整个集群):
如果要修改 Silo 普通用户的密码,例如 pgbackrest,请在可以访问 Silo 的节点上执行:
然后还要修改引用该用户密码的所有配置。例如,当 pgBackRest 使用 minio S3 兼容仓库预设时,需要同步更新访问密钥密码:
6 - 监控告警
管理界面
Silo 默认通过 minio_admin_port(9001)提供管理界面,可直接访问 https://<node-ip>:9001。
部分配置模板还会通过 m.pigsty 暴露管理入口。登录凭证由 minio_access_key 与 minio_secret_key 指定。
对象存储默认使用 Pigsty CA 签发的 HTTPS 证书。浏览器和容器客户端必须信任该 CA;生产环境不要以忽略证书校验代替正确配置证书信任。
采集链路
Silo 沿用 job="minio"、cls、ins、ip、instance 这组稳定身份标签,并使用 flavor="silo":
| 后端 | 指标链路 | 目标与标签 |
|---|---|---|
| Silo | VictoriaMetrics 拉取 https://<instance>:9000/minio/metrics/v3 |
job=minio,flavor=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 指标、系统日志与实例状态。
告警规则
当前 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 指标名:
7 - 指标列表
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 |
查询与记录规则应优先使用 cls、ins、ip 这些稳定身份标签。
Silo Metrics V3
每个 Silo 实例只抓取 V3 根端点 /minio/metrics/v3。当前关键指标如下:
| 类别 | 关键指标 | 含义 |
|---|---|---|
| 存活 | minio_up |
Pigsty 对该实例的抓取/健康状态 |
| 节点 | minio_cluster_health_nodes_online_count、minio_cluster_health_nodes_offline_count |
在线与离线节点数 |
| 磁盘 | minio_cluster_health_drives_online_count、minio_cluster_health_drives_offline_count |
在线与离线磁盘数 |
| 容量 | minio_cluster_health_capacity_raw_total_bytes |
原始总容量 |
| 容量 | minio_cluster_health_capacity_usable_total_bytes、minio_cluster_health_capacity_usable_free_bytes |
可用总容量与剩余容量 |
| 对象 | minio_cluster_usage_objects_count、minio_cluster_usage_objects_total_bytes |
对象数量与使用字节数 |
| 存储桶 | minio_cluster_usage_objects_buckets_count |
聚合存储桶数量 |
| 纠删码 | minio_cluster_erasure_set_overall_health、minio_cluster_erasure_set_overall_write_quorum |
纠删码集合健康与写入法定人数 |
| API | minio_api_requests_total、minio_api_requests_errors_total、minio_api_requests_4xx_errors_total |
API 请求与错误计数 |
| API | minio_api_requests_inflight_total、minio_api_requests_incoming_total |
并发与进入请求 |
| 流量 | minio_api_requests_traffic_received_bytes、minio_api_requests_traffic_sent_bytes |
收发字节数 |
| 延迟 | minio_api_requests_ttfb_seconds_distribution |
首字节延迟分布 |
| 进程 | minio_system_process_cpu_total_seconds、minio_system_process_resident_memory_bytes |
进程 CPU 与常驻内存 |
| 系统 | minio_system_drive_free_bytes、minio_system_drive_used_bytes、minio_system_drive_health |
单盘容量与健康状态 |
| 审计 | minio_audit_total_messages |
审计消息计数 |
Pigsty 在抓取阶段丢弃 bucket 标签非空的样本,并且不注册专用 per-bucket 与 replication 端点。这是刻意的基数控制策略;如果业务确实需要逐桶指标,应单独评估时序规模后自行增加采集任务。
8 - 常见问题
MINIO 模块默认部署哪个引擎?
v4.5.0 当前源码部署并且只部署 Silo,minio_type 唯一合法值是 silo。MINIO 是兼容模块名,不表示运行 MinIO 服务端。
- 新建集群建议显式写出
minio_type: silo。 minio_type: minio与minio_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 指定路径:
如果 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。 - 单机多盘的每个路径都应对应独立文件系统,不能用同一块盘上的多个目录模拟多盘。
- 只有 单机单盘 模式可以直接使用根文件系统中的普通目录,且仅适合开发测试或非关键场合。
使用下面的命令检查实际挂载点:
详细说明参见 集群配置:存储路径与挂载;三节点单盘拓扑参见 多机单盘。
如何向已有的 Silo 集群中添加新的成员?
在部署之前应规划好 Silo 集群容量,因为新增存储池需要全局重启。
可以通过为现有集群增加一组服务器节点,创建新的存储池来扩容。
不能直接修改既有存储池的节点数与磁盘数,只能通过添加新存储池扩容。
详细步骤请参考 Pigsty 文档:集群扩容,以及 MinIO 官方文档:扩展 MinIO 部署
如何移除 Silo 集群?
从 Pigsty v3.6 开始,移除 MinIO 集群需要使用专用的 minio-rm.yml 剧本:
删除角色也把 minio_type 默认为 silo,其他取值会被拒绝。示例仍显式写出该值,方便删除前连同集群身份和路径一起复核。
minio_rm_data 默认为 true,而移除角色会容忍部分清理错误。真实执行前应核对精确的 -l 目标和近期备份,执行后再检查服务、数据目录、DNS 与监控目标,不能只凭剧本返回状态判断清理完成。
如果您启用了 minio_safeguard 保护,需要显式覆盖才能执行移除:
mcli 命令与 mc 命令有什么区别?
Pigsty 将兼容的 MinIO 客户端以 mcli 命令和软件包名交付,而不是使用上游的 mc 名称,从而避免与同名的 Midnight Commander 文件管理器冲突。
mcli 是 Pigsty 对兼容客户端的交付名称,CLI 接口沿用 mc;具体版本仍可能随 Pigsty 打包更新。您可以在 MinIO 客户端文档 中查阅命令参考。
如何监控 Silo 集群状态?
Pigsty 为 Silo 提供了开箱即用的监控能力;面板与指标仍保留 MinIO 兼容命名:
- Grafana 面板:MinIO Overview 和 MinIO Instance
- 告警规则:包括 MinIO 宕机、节点离线、磁盘离线等告警
- Silo 内置控制台:通过
https://<minio-ip>:9001访问
详情请参阅 监控告警 文档
