文档 v2.7.0 版本已不再积极维护,你当前浏览的是一份归档快照。
最新文档请参阅 最新版本 。
模块:MINIO
Pigsty 内置了 MinIO 支持,一个本地 S3 对象存储开源替代。MinIO 将作为可选的 PostgreSQL 冷备份存储仓库。
Min.IO : S3兼容的开源多云对象存储。 配置 | 管理 | 剧本 | 监控 | 参数
MinIO 是一个与 S3 兼容的对象存储服务,可以用来存储文档、图片、视频和备份。它支持原生的多节点多磁盘的高可用部署,可扩展、安全且易于使用。
Pigsty 中的 PGSQL 模块默认会使用本地 posix 文件系统存储备份,但您也可以选择使用 MinIO,或者外部的 S3 服务作为集中式的备份存储。
如果使用 MinIO 作为备份存储库,那么在部署 PGSQL 集群前应当首先初始化 MinIO 集群。请注意,单机部署的 MinIO 不应当用于生产环境。
MinIO 模块需要安装在 Pigsty 纳管的节点上(也就是安装了 NODE 模块的节点),因为生产环境中的 MinIO 必须要使用 SSL 证书,所以会用到节点上的 CA。
请注意:MinIO 服务必须通过域名与 HTTPS 访问,所以请务必确保: MinIO 服务域名(默认为 sss.pigsty) 正确指向 MinIO 服务器节点
您可以在内网的 DNS 服务器上添加一条记录
如果您启用了 Infra 节点上的 DNS 服务器,可以在 dns_records 中添加记录
您也可以在 node_etc_hosts 中添加静态解析记录
参考实例:prod.yml 配置文件
配置
在部署之前,你需要定义一个 MinIO 集群。MinIO 有一些参数 可以配置。
单机单盘
参考:MinIO 单机单盘部署
定义一个单例 MinIO 实例非常简单:
# 1 节点 1 驱动器(默认)
minio : { hosts : { 10.10.10.10 : { minio_seq : 1 } }, vars : { minio_cluster : minio } }
单机模式下,唯一必要的参数是 minio_seq 和 minio_cluster ,它们会唯一标识每一个 MinIO 实例。
单节点单磁盘模式仅用于开发目的,因此您可以使用一个普通的目录作为数据目录,该目录默认为 /data/minio。
请注意,在多盘或多节点模式下,如果使用普通目录作为数据目录,而不是真实磁盘挂载点,MinIO 将拒绝启动。
单机多盘
参考:MinIO 单机多盘部署
要在单节点上使用多块磁盘,你需要以 {{ prefix }}{x...y} 的格式指定 minio_data ,该格式定义了一系列磁盘挂载点。
minio :
hosts : { 10.10.10.10 : { minio_seq : 1 } }
vars :
minio_cluster : minio # minio 集群名称,默认为 minio
minio_data : '/data{1...4}' # minio 数据目录,使用 {x...y} 记号来指定多块磁盘
本例定义了一个带有4块磁盘的单节点 MinIO 集群:/data1、/data2、/data3 和 /data4。启动 MinIO 之前,你需要正确地挂载它们:
mkfs.xfs /dev/sdb; mkdir /data1; mount -t xfs /dev/sdb /data1; # 挂载第一块盘……
多机多盘
参考:MinIO 多机多盘部署
MinIO 多节点部署需要使用一个额外的 minio_node 参数:
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_data : '/data{1...2}' # 每个节点使用两个磁盘
minio_node : '${minio_cluster}-${minio_seq}.pigsty' # minio 节点名称规则
在 minio_node 中的身份参数占位符 ${minio_cluster} 和 ${minio_seq} 将分别被替换为 minio_cluster 和 minio_seq 的值,并用作 MinIO 节点名称。
暴露服务
MinIO 默认使用 9000 端口提供服务。多节点 MinIO 集群可以通过任意一个节点来访问其服务。
多节点 MinIO 集群的高可用接入可以使用 L2 VIP 或 HAProxy 实现。例如,您可以选择使用 keepalived 在 MinIO 集群上绑定一个 L2 VIP ,
或者使用由 NODE 模块的提供的 haproxy 组件,通过负载均衡器对外暴露 MinIO 服务。
下面是使用 HAProxy 对外暴露服务的一个例子:
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 }
vars :
minio_cluster : minio
node_cluster : minio
minio_data : '/data{1...2}' # 每个节点两块磁盘
minio_node : '${minio_cluster}-${minio_seq}.pigsty' # MinIO 节点名称规则
haproxy_services : # 使用 HAPROXY 对外暴露 MinIO 服务
- name : minio # [必选] 服务名称,集群内唯一
port : 9002 # [必选] 服务端口,集群内唯一
options : # [可选] minio 健康检查
- 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' }
访问服务
如果您想要访问上面通过 HAProxy 暴露的 MinIO,以 PGSQL 备份配置为例,可以修改 pgbackrest_repo 中的配置,添加新的备份仓库定义:
# 这是新添加的 HA MinIO Repo 定义,使用此配置代替之前的单机 MinIO 配置
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 # 最好为 MinIO 的 pgbackrest 用户使用专门的密码
s3_key_secret : S3User.SomeNewPassWord
s3_uri_style : path
path : /pgbackrest
storage_port : 9002 # 使用负载均衡器的端口 9002 代替默认的 9000(直接访问)
storage_ca_file : /pg/cert/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
暴露管控
MinIO 默认通过 9001 端口提供Web管控界面。
将后台管理界面暴露给外部可能存在安全隐患。如果你希望这样做,请将 MinIO 添加到 infra_portal 并刷新 Nginx 配置。
infra_portal : # 域名和上游服务器定义
# ... # MinIO 管理页面需要 HTTPS / Websocket 才能工作
minio1 : { domain : sss.pigsty ,endpoint : 10.10.10.10:9001 ,scheme : https ,websocket : true }
minio2 : { domain : sss2.pigsty ,endpoint : 10.10.10.11:9001 ,scheme : https ,websocket : true }
minio3 : { domain : sss3.pigsty ,endpoint : 10.10.10.12:9001 ,scheme : https ,websocket : true }
查看 MinIO 示例配置 与专用的样例 Vagrantfile 来获取更多信息。
管理
下面是 MinIO 模块中常用的管理命令,更多问题请参考 FAQ:MINIO 。
创建集群
./minio.yml -l minio # 在 'minio' 分组上完成 MINIO 集群初始化
客户端配置
要使用 mcli 客户端访问 minio 服务器集群,首先要配置服务器的别名(alias):
mcli alias ls # 列出 minio 别名(默认使用sss)
mcli alias set sss https://sss.pigsty:9000 minioadmin minioadmin # root 用户
mcli alias set pgbackrest https://sss.pigsty:9000 pgbackrest S3User.Backup # 备份用户
使用 mcli 可以管理 MinIO 中的业务用户,例如这里我们可以使用命令行创建两个业务用户:
mcli admin user list sss # 列出 sss 上的所有用户
set +o history # 在历史记录中隐藏密码并创建 minio 用户
mcli admin user add sss dba S3User.DBA
mcli admin user add sss pgbackrest S3User.Backup
set -o history
MinIO mcli 的完整功能参考,请查阅文档: MinIO 客户端 。
增删改查
您可以对MinIO中的存储桶进行增删改查
mcli ls sss/ # 列出别名 'sss' 的所有桶
mcli mb --ignore-existing sss/hello # 创建名为 'hello' 的桶
mcli rb --force sss/hello # 强制删除 'hello' 桶
您也可以对存储桶内的对象进行增删改查
mcli cp -r /www/pigsty/*.rpm sss/infra/repo/ # 将文件上传到前缀为 'repo' 的 'infra' 桶中
mcli cp sss/infra/repo/pg_exporter-0.5.0.x86_64.rpm /tmp/ # 从 minio 下载文件到本地
剧本
MinIO 模块提供了一个默认的剧本 minio.yml ,用于安装 MinIO 集群。但首先你需要定义 它。
minio.yml
剧本 minio.yml 用于在节点上安装 MinIO 模块。
minio-id : 生成/校验 minio 身份参数
minio_os_user : 创建操作系统用户 minio
minio_install : 安装 minio/mcli 软件包
minio_clean : 移除 minio 数据目录 (默认不移除)
minio_dir : 创建 minio 目录
minio_config : 生成 minio 配置
minio_conf : minio 主配置文件
minio_cert : minio SSL证书签发
minio_dns : minio DNS记录插入
minio_launch : minio 服务启动
minio_register : minio 纳入监控
minio_provision : 创建 minio 别名/存储桶/业务用户
minio_alias : 创建 minio 客户端别名(管理节点上)
minio_bucket : 创建 minio 存储桶
minio_user : 创建 minio 业务用户
监控
Pigsty 提供了两个与 MINIO 模块有关的监控面板:
MinIO Overview 展示了 MinIO 集群的整体监控指标。
MinIO Instance 展示了单个 MinIO 实例的监控指标详情
参数
MINIO 模块有 15 个相关参数:
#minio_seq: 1 # minio 实例标识符,必填
minio_cluster : minio # minio 集群名称,默认为 minio
minio_clean : false # 初始化时清除 minio?默认为 false
minio_user : minio # minio 操作系统用户,默认为 `minio`
minio_node : '${minio_cluster}-${minio_seq}.pigsty' # minio 节点名模式
minio_data : '/data/minio' # minio 数据目录,使用 `{x...y}` 指定多个磁盘
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 : minioadmin # 根密钥,默认为 `minioadmin`
minio_extra_vars : '' # minio 服务器的额外环境变量
minio_alias : sss # minio 部署的客户端别名
minio_buckets : [ { name : pgsql }, { name: infra }, { name: redis } ] # 待创建的 minio 存储桶列表
minio_users : # 待创建的 minio 用户列表
- { access_key : dba , secret_key : S3User.DBA, policy : consoleAdmin }
- { access_key : pgbackrest , secret_key : S3User.Backup, policy : readwrite }
Pigsty MINIO 模块提供的完整监控指标列表与释义
Pigsty MINIO 对象存储模块常见问题答疑