demo/kernel
十节点 PostgreSQL 内核矩阵演示配置
demo/kernel 配置模板用于在一套配置中演示 Pigsty 支持的主要 PostgreSQL 内核与兼容分支。它面向功能验证和内核差异测试,不是生产模板。
配置概览
- 配置名称:
demo/kernel - 节点数量:10 个节点,其中 1 个同时承载 INFRA/ETCD 与
pg-citus - 配置说明:PostgreSQL 内核矩阵演示,覆盖 Citus、IvorySQL、Babelfish、PolarDB、Percona TDE、OrioleDB、OpenHalo、DocumentDB/FerretDB、AgensGraph、pgEdge
- 适用系统:以各内核包实际支持的平台为准
- 适用架构:以各内核包实际支持的平台为准
- 相关配置:
pgsql、mssql、mongo
启用方式:
./configure -c demo/kernel
备注:这是固定 IP 的演示模板,生成后需要按实际环境调整节点地址。
配置内容
源文件地址:pigsty/conf/demo/kernel.yml
---
#==============================================================#
# File : kernel.yml
# Desc : Pigsty 10-node kernel matrix demo
# Ctime : 2025-03-25
# Mtime : 2026-02-26
# Docs : https://pigsty.io/docs/conf
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
#==============================================================#
all:
children:
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } }, vars: { repo_enabled: false } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
# 1. Vanilla PostgreSQL + Citus in one kernel template
pg-citus:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-citus
pg_version: 18
pg_packages: [ pgsql-main, pgsql-common, citus ]
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 }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [citus, postgis, timescaledb, vector] }
pg_extensions: [ citus, postgis, timescaledb, pgvector ]
pg_libs: 'citus, pg_stat_statements, auto_explain'
# 2. IvorySQL kernel
pg-ivory:
hosts:
10.10.10.11: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: ivory
pg_cluster: pg-ivory
pg_version: 18
pg_packages: [ ivorysql, pgsql-common ]
pg_libs: 'liboracle_parser, pg_stat_statements, auto_explain'
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 }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] }
# 3. Babelfish (MSSQL compatible) kernel
pg-mssql:
hosts:
10.10.10.12: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: mssql
pg_cluster: pg-mssql
pg_version: 17
pg_packages: [ babelfish, pgsql-common, sqlcmd ]
pg_users:
- { name: dbuser_mssql ,password: DBUser.MSSQL ,superuser: true ,pgbouncer: true ,roles: [dbrole_admin] ,comment: superuser & owner for babelfish }
pg_databases:
- name: mssql
baseline: mssql.sql
extensions: [ uuid-ossp, babelfishpg_common, babelfishpg_tsql, babelfishpg_tds, babelfishpg_money ]
owner: dbuser_mssql
parameters: { 'babelfishpg_tsql.migration_mode' : 'multi-db' }
comment: babelfish cluster, a MSSQL compatible pg cluster
pg_libs: 'babelfishpg_tds, pg_stat_statements, auto_explain'
pg_hba_rules:
- { user: dbuser_mssql ,db: mssql ,addr: intra ,auth: md5 ,title: 'allow mssql dbsu intranet access' ,order: 525 }
- { user: all ,db: all ,addr: intra ,auth: md5 ,title: 'everyone intranet access with md5 pwd' ,order: 800 }
pg_default_services:
- { name: primary ,port: 5433 ,dest: 1433 ,check: /primary ,selector: "[]" }
- { name: replica ,port: 5434 ,dest: 1433 ,check: /read-only ,selector: "[]" ,backup: "[? pg_role == `primary` || pg_role == `offline` ]" }
- { name: default ,port: 5436 ,dest: postgres ,check: /primary ,selector: "[]" }
- { name: offline ,port: 5438 ,dest: postgres ,check: /replica ,selector: "[? pg_role == `offline` || pg_offline_query ]" ,backup: "[? pg_role == `replica` && !pg_offline_query]" }
# 4. PolarDB kernel
pg-polar:
hosts:
10.10.10.13: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: polar
pg_cluster: pg-polar
pg_version: 17
pg_packages: [ polardb, pgsql-common ]
pg_exporter_exclude_database: 'template0,template1,postgres,polardb_admin'
pg_default_roles:
- { name: dbrole_readonly ,login: false ,comment: role for global read-only access }
- { name: dbrole_offline ,login: false ,comment: role for restricted read-only access }
- { name: dbrole_readwrite ,login: false ,roles: [dbrole_readonly] ,comment: role for global read-write access }
- { name: dbrole_admin ,login: false ,roles: [pg_monitor, dbrole_readwrite] ,comment: role for object creation }
- { name: postgres ,superuser: true ,comment: system superuser }
- { name: replicator ,superuser: true ,replication: true ,roles: [pg_monitor, dbrole_readonly] ,comment: system replicator }
- { name: dbuser_dba ,superuser: true ,roles: [dbrole_admin] ,pgbouncer: true ,pool_mode: session ,pool_connlimit: 16 ,comment: pgsql admin user }
- { name: dbuser_monitor ,roles: [pg_monitor] ,pgbouncer: true ,parameters: { log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment: pgsql monitor user }
# 5. percona tde kernel
pg-tde:
hosts:
10.10.10.14: { pg_seq: 1, pg_role: primary }
vars:
node_repo_modules: node,infra,pgsql,percona
pg_cluster: pg-tde
pg_version: 18
pg_packages: [ percona-main, pgsql-common ]
pg_libs: 'pg_tde, pgaudit, pg_stat_statements, pg_stat_monitor, auto_explain'
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 }
pg_databases:
- name: meta
baseline: cmdb.sql
comment: pigsty tde database
schemas: [pigsty]
extensions: [ vector, postgis, pg_tde ,pgaudit, { name: pg_stat_monitor, schema: monitor } ]
# 6. OrioleDB kernel
pg-oriole:
hosts:
10.10.10.15: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: oriole
pg_cluster: pg-oriole
pg_version: 17
pg_packages: [ oriole, pgsql-common ]
pg_libs: 'orioledb, pg_stat_statements, auto_explain'
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 }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [orioledb] }
# 7. OpenHaloDB (MySQL compatible) kernel
pg-mysql:
hosts:
10.10.10.16: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: mysql
pg_cluster: pg-mysql
pg_version: 14
pg_packages: [ openhalo, pgsql-common ]
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 }
pg_databases:
- { name: postgres ,extensions: [aux_mysql] }
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] }
# 8. DocumentDB + MongoDB (FerretDB) kernel
pg-mongo:
hosts:
10.10.10.17: { pg_seq: 1, pg_role: primary ,mongo_seq: 1 }
vars:
pg_cluster: pg-mongo
pg_version: 18
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 }
pg_databases:
- { name: postgres ,extensions: [documentdb, postgis, vector, pg_cron, rum] }
pg_hba_rules:
- { user: dbuser_view ,db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
- { user: postgres ,db: all ,addr: world ,auth: pwd ,title: 'dbsu password access everywhere (demo only)' }
- { user: all ,db: all ,addr: localhost ,order: 1 ,auth: trust ,title: 'documentdb localhost trust access' }
- { user: all ,db: all ,addr: local ,order: 1 ,auth: trust ,title: 'documentdb local trust access' }
- { user: all ,db: all ,addr: intra ,auth: pwd ,order: 800 ,title: 'everyone intranet access with password' }
pg_parameters: { cron.database_name: postgres }
pg_extensions: [ documentdb, postgis, pgvector, pg_cron, rum ]
pg_libs: 'pg_documentdb, pg_documentdb_core, pg_documentdb_extended_rum, pg_cron, pg_stat_statements, auto_explain'
mongo_cluster: ferret
mongo_pgurl: 'postgres://dbuser_dba:DBUser.DBA@10.10.10.17:5432/postgres'
# 9. AgensGraph kernel
pg-agens:
hosts:
10.10.10.18: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: agens
pg_cluster: pg-agens
pg_version: 16
pg_packages: [ agensgraph, pgsql-common ]
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 }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] }
# 10. pgedge kernel (stock pigsty pgsql repo path)
pg-edge:
hosts:
10.10.10.19: { pg_seq: 1, pg_role: primary }
vars:
pg_mode: pgedge
pg_cluster: pg-edge
pg_version: 18
pg_packages: [ pgedge, pgsql-common ]
pg_extensions: [ spock, snowflake, lolor ]
pg_libs: 'spock, lolor, pg_stat_statements, auto_explain'
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 }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [spock, snowflake, lolor] }
vars:
version: v4.3.0 # pigsty version string
admin_ip: 10.10.10.10 # admin node ip address
region: default # upstream mirror region: default|china|europe
node_tune: oltp # node tuning specs: oltp,olap,tiny,crit
pg_conf: oltp.yml # pgsql tuning specs: {oltp,olap,tiny,crit}.yml
node_repo_modules: node,infra,pgsql
proxy_env:
no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
infra_portal:
home : { domain: i.pigsty }
grafana_admin_password: pigsty
grafana_view_password: DBUser.Viewer
pg_admin_password: DBUser.DBA
pg_monitor_password: DBUser.Monitor
pg_replication_password: DBUser.Replicator
patroni_password: Patroni.API
haproxy_admin_password: pigsty
minio_secret_key: S3User.MinIO
etcd_root_password: Etcd.Root
...
配置解读
该模板用单节点集群展示不同内核的最低可用配置:
pg-citus:PostgreSQL 18 + Cituspg-ivory:IvorySQL,兼容 PostgreSQL 18pg-mssql:Babelfish,兼容 PostgreSQL 17pg-polar:PolarDB for PostgreSQL,兼容 PostgreSQL 17pg-tde:Percona PostgreSQL 18 +pg_tdepg-oriole:OrioleDB,基于 PostgreSQL 17pg-mysql:OpenHalo,兼容 PostgreSQL 14pg-mongo:DocumentDB + FerretDB,默认 PostgreSQL 18pg-agens:AgensGraph,兼容 PostgreSQL 16pg-edge:pgEdge,兼容 PostgreSQL 18
注意事项:
- 不同内核的软件包支持平台不同,部署前应先确认目标系统的软件源可用性。
- 该模板包含演示用途的宽松访问规则,生产环境请改用单独内核模板并收紧 HBA 与密码策略。