Pigsty v4.5.0 配置参数详解
Pigsty v4.5.0 配置参数详解:按 Infra/Node/PGSQL/Monitor/Backup 五大类逐项实测 pigsty.yml 与 postgresql.conf 核心参数,含默认值、context 分级(user/sighup/postmaster)、pig patroni set 修改命令与重载/重启验证回显,附 16GB OLTP 生产配置模板。
Pigsty v4.5.0 配置参数详解
目标:把 Pigsty v4.5.0 的核心配置项讲清楚——它们写在哪、默认值是什么、改了之后怎么生效、如何验证。本篇基于 Debian 13 + PostgreSQL 18.6 实测,每类参数都给出「修改命令 → 生效方式 → 验证回显」的完整闭环(2026-10-25)。
一、环境信息
- Pigsty 版本:v4.5.0
- PostgreSQL 版本:18.6
- pig CLI 版本:1.8.0
- 操作系统:Debian 13 (trixie),x86_64
- 配置文件位置:
/root/pigsty/pigsty.yml(Pigsty 清单)、/pg/data/postgresql.conf(PG 运行时配置) - PG 调优模板:
oltp.yml - 节点调优模式:
oltp
二、前置条件
- Pigsty 已部署完成(PostgreSQL、Patroni、Grafana、VictoriaMetrics 均运行中)。
- 具备 root 权限或可执行
pig命令。 - 了解 Ansible inventory 的基本结构(
all.children.<group>.hosts与all.vars)。
三、参数查看与修改方式
3.1 查看配置
Pigsty 的全部声明式配置集中在 /root/pigsty/pigsty.yml。查看当前生效的 PostgreSQL 参数:
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SELECT name, setting, unit, context FROM pg_settings WHERE name IN ('shared_buffers','work_mem','effective_cache_size','max_connections','checkpoint_timeout','wal_level') ORDER BY name;"
回显:
name | setting | unit | context
----------------------+---------+------+------------
checkpoint_timeout | 900 | s | sighup
effective_cache_size | 2302208 | 8kB | user
max_connections | 500 | | postmaster
shared_buffers | 767488 | 8kB | postmaster
wal_level | logical | | postmaster
work_mem | 65536 | kB | user
3.2 修改配置的三种生效方式
PostgreSQL 参数按 context 分为三类,改法不同:
| context | 含义 | 生效方式 |
|---|---|---|
user | 用户会话级 | 改后即时生效,无需重载 |
superuser | 超级用户级 | 需 pg_reload_conf() 或 SIGHUP 重载 |
sighup | 配置文件级 | 需重载 |
postmaster | 启动级 | 需重启 PostgreSQL |
💡 技术拓展:PostgreSQL 参数 context 不止上述四种,完整分级还有
internal(编译期定,不可改)、backend(后端启动时定)。日常运维最常碰的是user(会话级,如work_mem)、sighup(配置级,如checkpoint_timeout)、postmaster(重启级,如shared_buffers、max_connections)。用SHOW或pg_settings.context字段可查每个参数的分级。
3.3 通过 pig patroni set 修改(推荐)
Pigsty 用 Patroni 管理 PostgreSQL,改参数统一走 pig patroni set KEY=VALUE,Patroni 会自动判断是否需要重载/重启:
echo y | pig patroni set work_mem=32MB
回显:
- work_mem: 64MB
+ work_mem: 32MB
remove_data_directory_on_rewind_failure: true
use_pg_rewind: true
use_slots: true
Apply these changes? [y/N]: Configuration changed
If the change was applied, verify with:
$ pig pt list
验证:
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SHOW work_mem;"
回显:
work_mem
----------
32MB
(1 row)
work_mem 是 user context,改后即时生效,无需重载。
3.4 修改需重载的参数(sighup / superuser)
以 log_statement(superuser context)为例:
echo y | pig patroni set log_statement=all
Patroni 会自动触发重载。验证:
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SHOW log_statement;"
回显:
log_statement
---------------
all
(1 row)
若需手动重载:
pig patroni reload pgsql
3.5 修改需重启的参数(postmaster)
以 max_connections 为例,它是 postmaster context,需重启 PostgreSQL:
echo y | pig patroni set max_connections=800
Patroni 会执行滚动重启(单节点即直接重启)。验证:
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SHOW max_connections;"
回显:
max_connections
-----------------
800
(1 row)
⚠️ 重启 PostgreSQL 会短暂中断连接,生产环境应在维护窗口操作,或通过 Patroni 滚动切换主从避免中断。
四、参数总览
Pigsty 配置按层级分为:基础设施(Infra)、节点(Node)、数据库(PGSQL)、监控(Monitor)、备份(Backup)五大类。
| 大类 | 关键配置项 | 位置 |
|---|---|---|
| Infra | region、admin_ip、infra_portal、proxy_env | all.vars |
| Node | nodename、node_tune、node_ntp_enabled、node_dns_method | all.vars |
| PGSQL | pg_version、pg_conf、pg_extensions、pg_users、pg_databases、pg_hba_rules | all.vars |
| Monitor | grafana_admin_password、pg_monitor_password | all.vars |
| Backup | pg_crontab、minio_* | all.vars |
五、核心参数分类详解
5.1 基础设施参数
region
- 默认值:
china - 说明:上游镜像源区域,可选
default、china、europe。决定部署时从哪个镜像源拉取包。 - 修改:编辑
pigsty.yml后./deploy.yml重新收敛。
admin_ip
- 默认值:
127.0.0.1(单节点) - 说明:管理节点 IP,Ansible 与 Grafana 数据源注册用。多节点集群需改为管理节点真实 IP。
- 修改:编辑
pigsty.yml后重新部署。
infra_portal
- 默认值:
{ home: { domain: i.pigsty } } - 说明:Web 门户的域名配置。Nginx 会根据
i.pigsty这个域名路由到 Pigsty 首页。 - 修改:可改为自己的域名,如
{ home: { domain: pigsty.example.com } }。
proxy_env
- 默认值:仅
no_proxy,http_proxy/https_proxy被注释。 - 说明:部署期间下载包使用的代理。内网环境需填写代理地址。
- 示例:
proxy_env:
http_proxy: http://192.168.1.62:7897
https_proxy: http://192.168.1.62:7897
no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16"
5.2 节点参数
nodename
- 默认值:
pigsty - 说明:节点主机名,用于 Grafana 面板与监控标识。
- 修改:编辑
pigsty.yml后重新部署。
node_tune
- 默认值:
oltp - 说明:节点调优模式,可选
oltp、olap、tiny、crit。决定内核参数(sysctl)与磁盘调度策略。 - 修改:改后重新部署,会重新应用 sysctl 参数。
💡 技术拓展:Pigsty 的节点调优模式对应不同业务负载——
模式 目标负载 关键调整 oltp在线事务处理 高并发、低延迟,IO 调度 deadline olap在线分析处理 大查询、高吞吐,IO 调度 none tiny微型/边缘 低资源占用,限制后台进程 crit关键业务 最保守参数,优先数据安全 本文单节点演示采用默认
oltp。
node_ntp_enabled
- 默认值:
false(单节点) - 说明:是否启用 NTP 时间同步。生产多节点集群建议设为
true,避免时钟漂移导致复制异常。
5.3 数据库参数
pg_version
- 默认值:
18 - 说明:PostgreSQL 主版本号,支持 14、15、16、17、18。
- 修改:改后重新部署会安装对应版本。注意:已部署后改版本需做迁移,不能直接覆盖。
pg_conf
- 默认值:
oltp.yml - 说明:PostgreSQL 调优模板,可选
oltp.yml、olap.yml、tiny.yml、crit.yml。决定shared_buffers、work_mem、effective_cache_size等核心参数。 - 当前生效值(oltp 模板):
| 参数 | 值 | context |
|---|---|---|
shared_buffers | 6GB (767488×8kB) | postmaster |
work_mem | 64MB | user |
effective_cache_size | 约 17.6GB | user |
maintenance_work_mem | 约 1.5GB | user |
max_connections | 500 | postmaster |
checkpoint_timeout | 15min | sighup |
max_wal_size | 92GB | sighup |
pg_extensions
- 默认值:
[pg18-main, pg18-time, pg18-gis, pg18-rag, pg18-fts, pg18-feat, pg18-lang, pg18-type, pg18-util, pg18-func, pg18-admin, pg18-stat, pg18-sec, pg18-fdw, pg18-sim, pg18-etl] - 说明:预装扩展组列表。每组对应一类扩展(如
pg18-gis是地理空间、pg18-rag是向量/AI)。 - 修改:从列表中移除某个组即不装该类扩展;改后重新部署。
⚠️ Pigsty v4.5.0 的
pg18-olap组内含冲突包(pg-duckdb与duckdb-fdw),APT 安装会失败。如需 OLAP 扩展,建议从列表移除pg18-olap,部署后按需单独安装。
pg_users
- 默认值:
pg_users:
- { name: dbuser_meta, password: <随机>, pgbouncer: true, roles: [dbrole_admin], comment: pigsty admin user }
- { name: dbuser_view, password: <随机>, pgbouncer: true, roles: [dbrole_readonly], comment: read-only viewer }
- 说明:声明式创建的数据库用户。
pgbouncer: true表示同时在 pgBouncer 中创建连接池用户。 - 修改:增删用户后重新部署,Ansible 会幂等地创建/删除。
pg_databases
- 默认值:
pg_databases:
- { name: meta, baseline: cmdb.sql, comment: pigsty meta database, schemas: [pigsty], extensions: [postgis, timescaledb, vector] }
- 说明:声明式创建的数据库。
baseline是初始化 SQL,extensions是需启用的扩展。 - 修改:增删数据库后重新部署。
pg_hba_rules
- 默认值:
pg_hba_rules:
- { user: all, db: all, addr: intra, auth: pwd, order: 800 }
- { user: all, db: all, addr: world, auth: pwd, order: 900 }
- 说明:客户端认证规则。
addr: intra表示内网地址段,addr: world表示所有地址。auth: pwd表示密码认证。 - 修改:改后重新部署,会重写
pg_hba.conf并重载。
pg_libs
- 默认值:
'timescaledb, pg_stat_statements, auto_explain, pg_wait_sampling' - 说明:
shared_preload_libraries的值,需在 PG 启动时加载的扩展。 - 修改:改后需重启 PostgreSQL(postmaster context)。
pg_crontab
- 默认值:
[ '00 01 * * * /pg/bin/pg-backup full' ] - 说明:postgres 用户的定时任务。默认每天凌晨 1 点执行全量备份。
- 修改:编辑后重新部署,会更新 crontab。
5.4 监控参数
grafana_admin_password
- 默认值:
./configure -g随机生成 - 说明:Grafana 管理员密码。
- 修改:编辑
pigsty.yml后重新部署,或在 Grafana 界面直接改。
pg_monitor_password
- 默认值:随机生成
- 说明:
dbuser_monitor用户密码,pg_exporter 用它连 PG 采集指标。 - 修改:需同步改
pigsty.yml与pg_exporter配置,重新部署。
5.5 备份参数
minio_secret_key / minio_access_key
- 默认值:随机生成 /
S3User.Backup - 说明:对象存储(MinIO/S3)的访问密钥,pgBackRest 用它把备份推到对象存储。
- 修改:编辑
pigsty.yml后重新部署。
六、生产配置模板
以下是一份 16GB 内存、NVMe SSD、OLTP 场景的推荐配置片段(摘自 pigsty.yml 的 all.vars):
all:
vars:
version: v4.5.0
admin_ip: 10.0.0.1 # 管理节点真实 IP
region: china
pg_version: 18
pg_conf: oltp.yml # OLTP 调优模板
pg_extensions: [pg18-main, pg18-time, pg18-gis, pg18-rag, pg18-stat, pg18-sec]
node_tune: oltp
node_ntp_enabled: true # 生产开启时间同步
pg_crontab:
- '00 01 * * * /pg/bin/pg-backup full' # 每日全量
- '*/15 * * * * /pg/bin/pg-backup incr' # 每 15 分钟增量
pg_hba_rules:
- { user: all, db: all, addr: intra, auth: scram-sha-256, order: 800 }
- { user: all, db: all, addr: world, auth: scram-sha-256, order: 900 }
💡 说明:生产环境建议把
auth从pwd改为scram-sha-256增强安全性;备份策略根据 RPO 要求调整增量频率。
七、配置修改完整流程示例
以「把 work_mem 从 64MB 改为 32MB 并验证」为例:
步骤 1:查看当前值
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SHOW work_mem;"
回显:
work_mem
----------
64MB
(1 row)
步骤 2:修改参数
echo y | pig patroni set work_mem=32MB
步骤 3:验证生效
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SHOW work_mem;"
回显:
work_mem
----------
32MB
(1 row)
步骤 4:持久化到 pigsty.yml(可选)
pig patroni set 只改运行时配置,若需持久化(重启部署后不丢失),需同步编辑 pigsty.yml 中对应参数,再 ./deploy.yml 收敛。
八、常见问题
8.1 pig patroni set 卡在 Apply these changes? [y/N]:
原因:pig patroni set 默认需要人工确认。
解决:管道传入确认:echo y | pig patroni set work_mem=32MB。
8.2 改了参数但 SHOW 还是旧值
排查:
- 确认参数 context:
SELECT name, context FROM pg_settings WHERE name = '...'; - 若 context 是
sighup/superuser,手动重载:pig patroni reload pgsql - 若 context 是
postmaster,需重启:pig patroni restart pgsql - 检查是否改对了集群名:
pig patroni list查看集群名(默认pgsql)
8.3 修改 pigsty.yml 后重新部署,PG 参数没变化
原因:pigsty.yml 中声明的 PG 参数通过 Patroni 配置管理,若 Patroni 中已有运行时覆盖值,./deploy.yml 不会强制覆盖。
解决:先 pig patroni edit-config 删除运行时覆盖,再重新部署;或直接用 pig patroni set 修改。
8.4 如何查看所有已修改的参数
PGPASSWORD=<pg_admin_password> psql -h 127.0.0.1 -U dbuser_dba -d postgres -c "SELECT name, setting FROM pg_settings WHERE source <> 'default' ORDER BY name;"
该命令列出所有非默认值的参数,便于核对改动。
九、参考链接
- 官方配置文档:https://pigsty.io/docs/conf/
- PostgreSQL 参数官方文档:https://www.postgresql.org/docs/current/runtime-config.html
- Patroni 配置:https://patroni.readthedocs.io/