配置清单
pigsty.yml 配置文件结构详解。
配置清单(Inventory)是 Pigsty 的核心配置文件,使用 YAML 格式描述整个基础设施的期望状态。
文件结构
默认配置文件为 pigsty.yml,位于 Pigsty 根目录:
---
# 全局配置
all:
vars:
# 全局变量...
children:
# 基础设施集群
infra:
hosts: { ... }
vars: { ... }
# ETCD 集群
etcd:
hosts: { ... }
vars: { ... }
# PostgreSQL 集群
pg-meta:
hosts: { ... }
vars: { ... }
pg-test:
hosts: { ... }
vars: { ... }
...
层次结构
全局级别(all.vars)
适用于所有主机和集群的默认配置:
all:
vars:
# 版本与区域
version: v3.3.0
region: default
# 基础设施
admin_ip: 10.10.10.10
# PostgreSQL 默认配置
pg_version: 17
pg_conf: oltp.yml
集群级别(cluster.vars)
特定集群的配置,覆盖全局默认值:
pg-test:
vars:
pg_cluster: pg-test
pg_version: 16 # 覆盖全局版本
pg_conf: crit.yml # 使用关键业务模板
pg_databases:
- name: testdb
pg_users:
- name: testuser
实例级别(host.vars)
特定实例的精细配置,最高优先级:
pg-test:
hosts:
10.10.10.11:
pg_seq: 1
pg_role: primary
10.10.10.12:
pg_seq: 2
pg_role: replica
pg_conf: tiny.yml # 此实例使用 tiny 模板
集群定义
必需参数
每个集群必须定义以下参数:
| 参数 | 说明 | 示例 |
|---|---|---|
pg_cluster |
集群名称 | pg-meta |
pg_seq |
实例序号 | 1, 2, 3 |
pg_role |
实例角色 | primary, replica |
完整示例
pg-test:
hosts:
10.10.10.11: { pg_seq: 1, pg_role: primary }
10.10.10.12: { pg_seq: 2, pg_role: replica }
10.10.10.13: { pg_seq: 3, pg_role: replica }
vars:
pg_cluster: pg-test
pg_version: 17
# 数据库定义
pg_databases:
- name: testdb
owner: testuser
extensions:
- postgis
- pg_stat_statements
# 用户定义
pg_users:
- name: testuser
password: DBUser.Test
roles: [dbrole_readwrite]
# 连接池
pg_default_services:
- { name: primary, port: 5433, dest: primary }
- { name: replica, port: 5434, dest: replica }
变量覆盖规则
优先级从低到高:
1. 角色默认值(roles/xxx/defaults/main.yml)
↓
2. 全局变量(all.vars)
↓
3. 集群变量(cluster.vars)
↓
4. 实例变量(host.vars)
↓
5. 命令行变量(-e "key=value")
示例
all:
vars:
pg_version: 17 # 全局默认 PG 17
children:
pg-legacy:
vars:
pg_version: 15 # 此集群使用 PG 15
hosts:
10.10.10.21:
pg_seq: 1
pg_role: primary
pg_version: 14 # 此实例使用 PG 14(特殊需求)
多环境管理
环境分离
为不同环境创建独立配置文件:
pigsty/
├── pigsty.yml # 当前环境(软链接)
├── conf/
│ ├── prod.yml # 生产环境
│ ├── staging.yml # 预发环境
│ ├── dev.yml # 开发环境
│ └── demo.yml # 演示环境
切换环境
# 方式一:使用软链接
ln -sf conf/prod.yml pigsty.yml
# 方式二:使用 -i 参数
./pgsql.yml -i conf/prod.yml -l pg-test
配置验证
语法检查
# YAML 语法检查
python3 -c "import yaml; yaml.safe_load(open('pigsty.yml'))"
# Ansible 语法检查
ansible-playbook pgsql.yml --syntax-check
查看变量
# 查看特定主机的变量
ansible -i pigsty.yml 10.10.10.11 -m debug -a "var=hostvars[inventory_hostname]"
# 查看集群变量
ansible -i pigsty.yml pg-test -m debug -a "var=group_vars"
干运行
# 检查模式(不实际执行)
./pgsql.yml -l pg-test --check
# 差异对比
./pgsql.yml -l pg-test --diff
最佳实践
配置组织
- 全局变量精简:只放真正全局的默认值
- 集群变量完整:包含集群特有的所有配置
- 实例变量最少:只放必需的身份标识
命名规范
# 集群名:模块-用途
pg-meta # PostgreSQL 元数据库
pg-order # 订单服务数据库
redis-cache # Redis 缓存集群
# 实例名:集群名-序号
pg-meta-1 # 集群 pg-meta 的第 1 个实例
pg-order-2 # 集群 pg-order 的第 2 个实例
版本控制
# 初始化 Git
cd ~/pigsty
git init
git add pigsty.yml
git commit -m "Initial configuration"
# 每次变更都提交
git add pigsty.yml
git commit -m "Add pg-order cluster"