配置定制

使用声明式的配置文件描述你需要的基础设施与集群

每个 Pigsty 部署都有一个对应的配置 清单。 它可以存储在 YAML 格式的本地配置文件中,或从 CMDB 或任何 Ansible 兼容格式动态生成。 Pigsty 默认使用一个单一的 YAML 配置文件,即 pigsty.yml,位于 Pigsty 主目录中。

configure 脚本将根据您的环境和输入生成具有良好默认值的 pigsty.yml 文件脚手架, 但它是 可选的:您始终可以直接编辑 pigsty.yml 文件,如 配置教程 所示。


配置结构

清单由两部分组成:全局变量 和多个 。您可以在 all.children 中定义新集群。 并使用全局变量描述基础设施:all.vars。它看起来像这样:

all:                  # 顶级对象:all
  vars: {...}         # 全局参数
  children:           # 组定义
    infra:            # 组定义:'infra'
      hosts: {...}        # 组成员:'infra'
      vars:  {...}        # 组参数:'infra'
    etcd:    {...}    # 组定义:'etcd'
    pg-meta: {...}    # 组定义:'pg-meta'
    pg-test: {...}    # 组定义:'pg-test'
    redis-test: {...} # 组定义:'redis-test'
    # ...

conf/ 目录下有大量示例,在 configure 期间也可以用作 配置模板


集群定义

每个 Ansible 组可能代表一个集群,可以是节点集群、PostgreSQL 集群、Redis 集群、Etcd 集群或 MinIO 集群等…

集群定义由两部分组成:hostsvars。 您可以在 <cls>.hosts 中定义集群成员,并在 <cls>.vars 中使用参数描述集群。 这是一个 3 节点 HA PostgreSQL 集群的示例:

all:
  children:    # 所有组
    pg-test:   # 组名
      hosts:   # 组主机(集群成员)
        10.10.10.11: { pg_seq: 1, pg_role: primary } # 主机 1
        10.10.10.12: { pg_seq: 2, pg_role: replica } # 主机 2
        10.10.10.13: { pg_seq: 3, pg_role: offline } # 主机 3
      vars:    # 组变量(集群参数)
        pg_cluster: pg-test

集群级别的 vars 将覆盖全局变量,主机级别的 vars 将覆盖集群变量和全局变量。


参数优先级

参数是定义部署中所有实体的键值对。键是字符串名称,值可以是五种类型之一:布尔值、字符串、数字、数组或对象。

参数可以在不同级别设置,具有以下优先级:

级别位置描述优先级
CLI 参数命令行通过 -e CLI 参数最高 (5)
主机变量<group>.hosts.<host>特定于单个主机的参数高 (4)
组变量<group>.vars组/集群中主机共享的参数中等 (3)
全局变量all.vars所有主机共享的参数低 (2)
默认值<roles>/default/main.yml角色实现默认值最低 (1)

以下是关于参数优先级的一些示例:

  • 使用 Playbook CLI 参数 -e pg_clean=true 强制删除现有数据库
  • 使用主机变量上的实例级别参数 pg_role 覆盖 pg 实例角色
  • 使用组变量上的集群级别参数 pg_cluster 覆盖 pg 集群名称。
  • 使用全局变量上的全局参数 node_ntp_servers 指定全局 NTP 服务器
  • 如果没有设置 pg_version,Pigsty 将使用角色实现的默认值(默认为 17

身份参数

除了强制性的 身份参数 外,每个参数都有一个适当的默认值;身份参数用作标识符,必须明确设置。 例如上述片段中的 pg_clusterpg_rolepg_seq

不同模块的身份参数:

模块身份参数
PGSQLpg_cluster, pg_seq, pg_role
NODEnodename, node_cluster
ETCDetcd_cluster, etcd_seq
MINIOminio_cluster, minio_seq
REDISredis_cluster, redis_node, redis_instances
INFRAinfra_seq

教程

以下是一个定义单节点 PostgreSQL 集群的完整配置示例:

all:
  children:

    # 定义一个单节点 PostgreSQL 集群
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta

        # 定义业务数据库
        pg_databases:
          - name: meta
            baseline: cmdb.sql
            comment: "pigsty meta database"
            schemas: [pigsty]
            extensions: [ postgis, vector ]

        # 定义业务用户
        pg_users:
          - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin   ] ,comment: pigsty admin user }
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer  }

    # 基础设施组
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }
      vars:
        repo_enabled: false   # 单节点模式禁用本地仓库

    # ETCD 组
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd

  # 全局变量
  vars:
    version: v4.0.0                   # pigsty 版本字符串
    admin_ip: 10.10.10.10             # 管理节点 IP 地址
    region: china                     # 上游镜像区域

    # 密码配置(请务必修改!)
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty

    # PostgreSQL 配置
    pg_version: 17                    # PostgreSQL 大版本
    pg_conf: oltp.yml                 # 调优模板

配置模板

Pigsty 提供了丰富的 配置模板,涵盖各种使用场景:

模板说明
meta单节点默认配置(默认)
rich下载安装所有扩展
slim精简安装,仅 PG + ETCD
ha/full4 节点沙箱环境
ha/simu42 节点仿真环境
app/supa自托管 Supabase
ivoryIvorySQL Oracle 兼容
mssqlBabelfish MSSQL 兼容

使用 configure 脚本选择模板:

./configure -c rich          # 使用 rich 模板
./configure -c ha/full       # 使用 4 节点沙箱模板
./configure -c app/supa      # 使用 Supabase 模板

切换配置源

要使用不同的配置模板,您可以将模板的内容复制到 Pigsty 源码目录的 pigsty.yml 文件中,并按需进行相应调整。

您也可以在执行 Ansible 剧本时,通过 -i 命令行参数,显式指定使用的配置文件,例如:

./node.yml -i files/pigsty/rpmbuild.yml    # 使用 rpmbuild 配置文件,而不是默认的 pigsty.yml

如果您希望修改默认的配置文件名称与位置,您也可以修改源码根目录下的 ansible.cfginventory 参数,将其指向您的配置文件路径。

Pigsty 允许您使用数据库(CMDB)作为动态配置源,而不是使用静态配置文件。 Pigsty 提供了三个便利脚本:

脚本功能
bin/inventory_loadpigsty.yml 配置文件的内容加载到本机 PostgreSQL 数据库中
bin/inventory_cmdb切换配置源为本地 PostgreSQL 数据库
bin/inventory_conf切换配置源为本地静态配置文件 pigsty.yml

参数参考

Pigsty 有 290+ 个参数,分为以下 32 个参数组,详情请参考各模块参数文档:

模块参数组描述数量
INFRAMETAPigsty 元数据4
INFRACA自签名公私钥基础设施 CA3
INFRAINFRA_ID基础设施门户,Nginx 域名2
INFRAREPO本地软件仓库9
INFRAINFRA_PACKAGE基础设施软件包2
INFRANGINXNginx 网络服务器7
INFRADNSDNSMASQ 域名服务器3
INFRAPROMETHEUSPrometheus 时序数据库全家桶18
INFRAGRAFANAGrafana 可观测性全家桶6
INFRALOKILoki 日志服务4
NODENODE_ID节点身份参数5
NODENODE_DNS节点域名 & DNS 解析6
NODENODE_PACKAGE节点仓库源 & 安装软件包5
NODENODE_TUNE节点调优与内核特性开关10
NODENODE_ADMIN管理员用户与 SSH 凭证管理7
NODENODE_TIME时区,NTP 服务与定时任务5
NODENODE_VIP可选的主机节点集群 L2 VIP8
NODEHAPROXY使用 HAProxy 对外暴露服务10
NODENODE_EXPORTER主机节点监控与注册3
NODEPROMTAILPromtail 日志收集组件4
DOCKERDOCKERDocker 容器服务(可选)4
ETCDETCDEtcd DCS 集群10
MINIOMINIOMinIO S3 对象存储15
REDISREDISRedis 缓存20
PGSQLPG_IDPG 身份参数11
PGSQLPG_BUSINESSPG 业务对象定义12
PGSQLPG_INSTALL安装 PG 软件包 & 扩展10
PGSQLPG_BOOTSTRAP使用 Patroni 初始化 HA PG 集群39
PGSQLPG_PROVISION创建 PG 数据库内对象9
PGSQLPG_BACKUP使用 pgBackRest 设置备份仓库5
PGSQLPG_SERVICE对外暴露服务,绑定 VIP,DNS9
PGSQLPG_EXPORTERPG 监控,服务注册15

最后修改 2025-12-31: routine doc polish (6193687)