这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
内核模板
使用不同 PostgreSQL 内核变体的配置模板
使用不同 PostgreSQL 内核变体的配置模板。
| 模板 | 内核 | PG版本 | 说明 |
|---|
| pgsql | PostgreSQL | 13~18 | 原生 PostgreSQL 内核 |
| citus | Citus | 14~17 | 分布式高可用 PostgreSQL |
| mssql | Babelfish/WiltonDB | 15 | SQL Server 协议兼容 |
| polar | PolarDB PG | 15 | Aurora/RAC 风格存算分离 |
| ivory | IvorySQL | 18 | Oracle 语法兼容 |
| mysql | OpenHalo | 14 | MySQL 协议兼容 |
| pgtde | Percona PG | 18 | 透明数据加密 (pg_tde) |
| oriole | OrioleDB | 17 | OLTP 增强,无膨胀存储引擎 |
| mongo | DocumentDB/FerretDB | 17 | MongoDB 协议兼容 |
1 - pgsql
原生 PostgreSQL 内核,支持 PostgreSQL 13 到 18 的多版本部署
pgsql 配置模板使用原生 PostgreSQL 内核,是 Pigsty 的默认数据库内核,支持 PostgreSQL 13 到 18 版本。
配置概览
- 配置名称:
pgsql - 节点数量: 单节点
- 配置说明:原生 PostgreSQL 内核配置模板
- 适用系统:
el8, el9, d12, u22, u24 - 适用架构:
x86_64, aarch64 - 相关配置:
meta
启用方式:
./configure -c pgsql [-i <primary_ip>]
如需指定特定 PostgreSQL 版本(如 17):
./configure -c pgsql -v 17
配置内容
源文件地址:pigsty/conf/pgsql.yml
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 }}
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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: [{name: vector},{name: postgis}]}
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 18 # 默认 PostgreSQL 18
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
pgsql 模板是 Pigsty 的标准内核配置,使用社区原生 PostgreSQL。
版本支持:
- PostgreSQL 18(默认)
- PostgreSQL 17、16、15、14、13
适用场景:
- 需要使用最新 PostgreSQL 特性
- 需要最广泛的扩展支持
- 标准生产环境部署
- 与
meta 模板功能相同,显式声明使用原生内核
与 meta 的区别:
pgsql 模板显式声明使用原生 PostgreSQL 内核- 适合需要明确区分不同内核类型的场景
2 - citus
Citus 分布式 PostgreSQL 集群,提供水平扩展与分片能力
citus 配置模板使用 Citus 扩展部署分布式 PostgreSQL 集群,提供透明的水平扩展与数据分片能力。
配置概览
- 配置名称:
citus - 节点数量: 五节点(1 协调节点 + 4 数据节点)
- 配置说明:Citus 分布式 PostgreSQL 集群
- 适用系统:
el8, el9, d12, u22, u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c citus [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/citus.yml
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 }}
#----------------------------------------------#
# Citus 协调节点
#----------------------------------------------#
pg-citus0:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-citus0
pg_group: 0 # Citus 协调节点组 ID
pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]
#----------------------------------------------#
# Citus 数据节点 1
#----------------------------------------------#
pg-citus1:
hosts: { 10.10.10.11: { pg_seq: 1, pg_role: primary } }
vars: { pg_cluster: pg-citus1, pg_group: 1 }
#----------------------------------------------#
# Citus 数据节点 2
#----------------------------------------------#
pg-citus2:
hosts: { 10.10.10.12: { pg_seq: 1, pg_role: primary } }
vars: { pg_cluster: pg-citus2, pg_group: 2 }
#----------------------------------------------#
# Citus 数据节点 3
#----------------------------------------------#
pg-citus3:
hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary } }
vars: { pg_cluster: pg-citus3, pg_group: 3 }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 17 # Citus 支持 PG 14~17
pg_conf: oltp.yml
# Citus 专用配置
pg_mode: citus
pg_shard: pg-citus # Citus 集群名称
pg_primary_db: citus # Citus 主数据库
pg_extensions: [ citus, postgis, pgvector ]
pg_libs: 'citus, pg_stat_statements, auto_explain'
pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]
pg_hba_rules:
- { user: 'all' ,db: 'all' ,addr: '10.10.10.0/24' ,auth: ssl ,title: 'trust citus cluster members' }
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
citus 模板部署 Citus 分布式 PostgreSQL 集群,适合需要水平扩展的大规模数据场景。
关键特性:
- 透明数据分片,自动分布数据到多个节点
- 并行查询执行,聚合多节点结果
- 支持分布式事务(2PC)
- 保持 PostgreSQL SQL 兼容性
架构说明:
- 协调节点 (pg-citus0):接收查询,路由到数据节点
- 数据节点 (pg-citus1~3):存储分片数据
适用场景:
- 单表数据量超过单机容量
- 需要水平扩展写入和查询性能
- 多租户 SaaS 应用
- 实时分析型工作负载
注意事项:
- Citus 支持 PostgreSQL 14~17
- 分布式表需要指定分布列
- 部分 PostgreSQL 特性可能受限(如外键跨分片)
- 不支持 ARM64 架构
3 - mssql
WiltonDB / Babelfish 内核,提供 Microsoft SQL Server 协议与语法兼容能力
mssql 配置模板使用 WiltonDB / Babelfish 数据库内核替代原生 PostgreSQL,提供 Microsoft SQL Server 线缆协议(TDS)与 T-SQL 语法兼容能力。
完整教程请参考:Babelfish (MSSQL) 内核使用说明
配置概览
- 配置名称:
mssql - 节点数量: 单节点
- 配置说明:WiltonDB / Babelfish 配置模板,提供 SQL Server 协议兼容
- 适用系统:
el8, el9, u22, u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c mssql [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/mssql.yml
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 }}
#----------------------------------------------#
# Babelfish Database Cluster
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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 }
- {name: dbuser_mssql ,password: DBUser.MSSQL ,superuser: true ,pgbouncer: true ,roles: [dbrole_admin] ,comment: babelfish superuser }
pg_databases:
- name: mssql
baseline: mssql.sql # 初始化 babelfish 数据库
extensions:
- { name: uuid-ossp }
- { name: babelfishpg_common }
- { name: babelfishpg_tsql }
- { name: babelfishpg_tds }
- { name: babelfishpg_money }
- { name: pg_hint_plan }
- { name: system_stats }
- { name: tds_fdw }
owner: dbuser_mssql
parameters: { 'babelfishpg_tsql.migration_mode' : 'multi-db' }
comment: babelfish MSSQL compatible database
- {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty]}
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access' }
- {user: dbuser_mssql ,db: mssql ,addr: intra ,auth: md5 ,title: 'allow mssql dbsu intranet access' }
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# Babelfish Ad Hoc Settings
pg_mode: mssql # MSSQL 兼容模式
pg_packages: [ wiltondb, pgsql-common ] # 安装 WiltonDB 内核
pg_libs: 'babelfishpg_tds, pg_stat_statements, auto_explain'
pg_default_services: # TDS 端口 1433 服务路由
- { 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]" }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 15 # WiltonDB 基于 PostgreSQL 15
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
mssql 模板让您可以使用 SQL Server Management Studio (SSMS) 或其他 SQL Server 客户端工具连接 PostgreSQL。
关键特性:
- 使用 TDS 协议(端口 1433),兼容 SQL Server 客户端
- 支持 T-SQL 语法,迁移成本低
- 保留 PostgreSQL 的 ACID 特性和扩展生态
- 支持
multi-db 和 single-db 两种迁移模式
连接方式:
# 使用 sqlcmd 命令行工具
sqlcmd -S 10.10.10.10,1433 -U dbuser_mssql -P DBUser.MSSQL -d mssql
# 使用 SSMS 或 Azure Data Studio
# Server: 10.10.10.10,1433
# Authentication: SQL Server Authentication
# Login: dbuser_mssql
# Password: DBUser.MSSQL
适用场景:
- 从 SQL Server 迁移到 PostgreSQL
- 需要同时支持 SQL Server 和 PostgreSQL 客户端的应用
- 希望利用 PostgreSQL 生态同时保持 T-SQL 兼容性
注意事项:
- WiltonDB 基于 PostgreSQL 15,不支持更高版本特性
- 部分 T-SQL 语法可能存在兼容性差异,请参考 Babelfish 兼容性文档
- 需要使用
md5 认证方式(而非 scram-sha-256)
4 - polar
PolarDB for PostgreSQL 内核,提供 Aurora 风格的存算分离能力
polar 配置模板使用阿里云 PolarDB for PostgreSQL 数据库内核替代原生 PostgreSQL,提供"云原生" Aurora 风格的存算分离能力。
完整教程请参考:PolarDB for PostgreSQL (POLAR) 内核使用说明
配置概览
- 配置名称:
polar - 节点数量: 单节点
- 配置说明:使用 PolarDB for PostgreSQL 内核
- 适用系统:
el8, el9, u22, u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c polar [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/polar.yml
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 }}
#----------------------------------------------#
# PolarDB Database Cluster
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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]}
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# PolarDB 专用配置
pg_mode: polar # PolarDB 模式
pg_packages: [ polardb, pgsql-common ] # 安装 PolarDB 内核
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 }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 15 # PolarDB 基于 PostgreSQL 15
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
polar 模板使用阿里云开源的 PolarDB for PostgreSQL 内核,提供云原生数据库能力。
关键特性:
- 存算分离架构,计算节点和存储节点可独立扩展
- 支持一写多读,读副本秒级扩展
- 兼容 PostgreSQL 生态,保持 SQL 兼容性
- 支持共享存储场景,适合云环境部署
适用场景:
- 需要存算分离架构的云原生场景
- 读多写少的业务负载
- 需要快速扩展读副本的场景
- 评估 PolarDB 特性的测试环境
注意事项:
- PolarDB 基于 PostgreSQL 15,不支持更高版本特性
- 复制用户需要超级用户权限(与原生 PostgreSQL 不同)
- 部分 PostgreSQL 扩展可能存在兼容性问题
- 不支持 ARM64 架构
5 - ivory
IvorySQL 内核,提供 Oracle 语法与 PL/SQL 兼容能力
ivory 配置模板使用瀚高的 IvorySQL 数据库内核替代原生 PostgreSQL,提供 Oracle 语法与 PL/SQL 兼容能力。
完整教程请参考:IvorySQL (Oracle兼容) 内核使用说明
配置概览
- 配置名称:
ivory - 节点数量: 单节点
- 配置说明:使用 IvorySQL Oracle 兼容内核
- 适用系统:
el8, el9 - 适用架构:
x86_64, aarch64 - 相关配置:
meta
启用方式:
./configure -c ivory [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/ivory.yml
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 }}
#----------------------------------------------#
# IvorySQL Database Cluster
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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]}
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# IvorySQL 专用配置
pg_mode: ivory # IvorySQL Oracle 兼容模式
pg_packages: [ ivorysql, pgsql-common ] # 安装 IvorySQL 内核
pg_libs: 'liboracle_parser, pg_stat_statements, auto_explain'
pgbackrest_enabled: false # IvorySQL 模式下 pgbackrest 存在校验问题
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 18 # IvorySQL 4 基于 PostgreSQL 18
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
ivory 模板使用瀚高开源的 IvorySQL 内核,提供 Oracle 数据库兼容能力。
关键特性:
- 支持 Oracle PL/SQL 语法
- 兼容 Oracle 数据类型(NUMBER、VARCHAR2 等)
- 支持 Oracle 风格的包(Package)
- 保留 PostgreSQL 的所有标准功能
适用场景:
- 从 Oracle 迁移到 PostgreSQL
- 需要同时支持 Oracle 和 PostgreSQL 语法的应用
- 希望利用 PostgreSQL 生态同时保持 PL/SQL 兼容性
- 评估 IvorySQL 特性的测试环境
注意事项:
- IvorySQL 4 基于 PostgreSQL 18
- 使用
liboracle_parser 需要加载到 shared_preload_libraries pgbackrest 在 Oracle 兼容模式下可能存在校验问题,PITR 能力受限- 仅支持 EL8/EL9 系统,不支持 Debian/Ubuntu
6 - mysql
OpenHalo 内核,提供 MySQL 协议与语法兼容能力
mysql 配置模板使用 OpenHalo 数据库内核替代原生 PostgreSQL,提供 MySQL 线缆协议与 SQL 语法兼容能力。
配置概览
- 配置名称:
mysql - 节点数量: 单节点
- 配置说明:OpenHalo MySQL 兼容内核配置
- 适用系统:
el8, el9 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c mysql [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/mysql.yml
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 }}
#----------------------------------------------#
# OpenHalo MySQL Compatible Cluster
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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]}
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# OpenHalo 专用配置
pg_mode: mysql # MySQL 兼容模式
pg_packages: [ openhalo, pgsql-common ] # 安装 OpenHalo 内核
pg_default_services: # MySQL 端口 3306 服务路由
- { name: primary ,port: 5433 ,dest: 3306 ,check: /primary ,selector: "[]" }
- { name: replica ,port: 5434 ,dest: 3306 ,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]" }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 14 # OpenHalo 基于 PostgreSQL 14
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
mysql 模板使用 OpenHalo 内核,让您可以使用 MySQL 客户端工具连接 PostgreSQL。
关键特性:
- 使用 MySQL 协议(端口 3306),兼容 MySQL 客户端
- 支持 MySQL SQL 语法子集
- 保留 PostgreSQL 的 ACID 特性和存储引擎
- 同时支持 PostgreSQL 和 MySQL 两种协议连接
连接方式:
# 使用 MySQL 客户端
mysql -h 10.10.10.10 -P 3306 -u dbuser_meta -pDBUser.Meta
# 同时保留 PostgreSQL 连接能力
psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
适用场景:
- 从 MySQL 迁移到 PostgreSQL
- 需要同时支持 MySQL 和 PostgreSQL 客户端的应用
- 希望利用 PostgreSQL 生态同时保持 MySQL 兼容性
注意事项:
- OpenHalo 基于 PostgreSQL 14,不支持更高版本特性
- 部分 MySQL 语法可能存在兼容性差异
- 仅支持 EL8/EL9 系统
- 不支持 ARM64 架构
7 - pgtde
Percona PostgreSQL 内核,提供透明数据加密 (pg_tde) 能力
pgtde 配置模板使用 Percona PostgreSQL 数据库内核,提供透明数据加密 (Transparent Data Encryption, TDE) 能力。
配置概览
- 配置名称:
pgtde - 节点数量: 单节点
- 配置说明:Percona PostgreSQL 透明数据加密配置
- 适用系统:
el8, el9, d12, u22, u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c pgtde [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/pgtde.yml
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 }}
#----------------------------------------------#
# Percona PostgreSQL with pg_tde
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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: [{ name: pg_tde }] # 启用透明数据加密扩展
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# Percona PostgreSQL 专用配置
pg_mode: pgtde # Percona TDE 模式
pg_packages: [ percona-postgresql, pgsql-common ] # 安装 Percona PostgreSQL 内核
pg_libs: 'pg_tde, pg_stat_statements, auto_explain'
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 18 # Percona PostgreSQL 18
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
pgtde 模板使用 Percona PostgreSQL 内核,提供企业级透明数据加密能力。
关键特性:
- 透明数据加密:数据在磁盘上自动加密,对应用透明
- 密钥管理:支持本地密钥和外部密钥管理系统 (KMS)
- 表级加密:可选择性加密敏感表
- 完整兼容:与原生 PostgreSQL 完全兼容
适用场景:
- 需要满足数据安全合规要求(如 PCI-DSS、HIPAA)
- 存储敏感数据(如个人信息、金融数据)
- 需要静态数据加密的场景
- 对数据安全有严格要求的企业环境
使用方法:
-- 创建加密表
CREATE TABLE sensitive_data (
id SERIAL PRIMARY KEY,
ssn VARCHAR(11)
) USING pg_tde;
-- 或对现有表启用加密
ALTER TABLE existing_table SET ACCESS METHOD pg_tde;
注意事项:
- Percona PostgreSQL 基于 PostgreSQL 18
- 加密会带来一定性能开销(通常 5-15%)
- 需要妥善管理加密密钥
- 不支持 ARM64 架构
8 - oriole
OrioleDB 内核,提供无膨胀的 OLTP 增强存储引擎
oriole 配置模板使用 OrioleDB 存储引擎替代 PostgreSQL 默认的 Heap 存储,提供无膨胀、高性能的 OLTP 能力。
配置概览
- 配置名称:
oriole - 节点数量: 单节点
- 配置说明:OrioleDB 无膨胀存储引擎配置
- 适用系统:
el8, el9, u22, u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c oriole [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/oriole.yml
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 }}
#----------------------------------------------#
# OrioleDB Cluster
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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: [{ name: orioledb }] # 启用 OrioleDB 扩展
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# OrioleDB 专用配置
pg_mode: oriole # OrioleDB 模式
pg_packages: [ orioledb, pgsql-common ] # 安装 OrioleDB 内核
pg_libs: 'orioledb, pg_stat_statements, auto_explain'
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 17 # OrioleDB 基于 PostgreSQL 17
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
oriole 模板使用 OrioleDB 存储引擎,从根本上解决 PostgreSQL 表膨胀问题。
关键特性:
- 无膨胀设计:使用 UNDO 日志而非多版本并发控制 (MVCC)
- 无需 VACUUM:消除 autovacuum 带来的性能抖动
- 行级 WAL:更高效的日志记录和复制
- 压缩存储:内置数据压缩,减少存储空间
适用场景:
- 高频更新的 OLTP 工作负载
- 对写入延迟敏感的应用
- 需要稳定响应时间(消除 VACUUM 影响)
- 大表频繁更新导致膨胀的场景
使用方法:
-- 创建使用 OrioleDB 存储的表
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2)
) USING orioledb;
-- 对现有表无法直接转换,需要重建
注意事项:
- OrioleDB 基于 PostgreSQL 17
- 需要将
orioledb 添加到 shared_preload_libraries - 部分 PostgreSQL 特性可能不完全支持
- 不支持 ARM64 架构
9 - mongo
FerretDB/DocumentDB 内核,提供 MongoDB 协议兼容能力
mongo 配置模板使用 FerretDB 或 AWS DocumentDB 兼容层,为 PostgreSQL 提供 MongoDB 线缆协议兼容能力。
配置概览
- 配置名称:
mongo - 节点数量: 单节点
- 配置说明:FerretDB/DocumentDB MongoDB 兼容配置
- 适用系统:
el8, el9, d12, u22, u24 - 适用架构:
x86_64, aarch64 - 相关配置:
meta
启用方式:
./configure -c mongo [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/mongo.yml
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 }}
#----------------------------------------------#
# MongoDB Compatible PostgreSQL
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
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:
- { name: documentdb_core }
- { name: documentdb_distributed }
pg_hba_rules:
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
# DocumentDB 专用配置
pg_mode: mongo # MongoDB 兼容模式
pg_extensions: [ documentdb, postgis, pgvector ]
pg_libs: 'documentdb.so, pg_stat_statements, auto_explain'
#----------------------------------------------#
# FerretDB Docker 服务 (可选)
#----------------------------------------------#
app:
hosts: { 10.10.10.10: {} }
vars:
docker_enabled: true
app: ferretdb
apps:
ferretdb:
conf:
FERRETDB_POSTGRESQL_URL: "postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/ferretdb"
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
nodename_overwrite: false
node_repo_modules: node,infra,pgsql
node_tune: oltp
pg_version: 17
pg_conf: oltp.yml
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
mongo 模板让您可以使用 MongoDB 客户端工具(如 mongosh)连接 PostgreSQL。
两种实现方式:
- FerretDB:作为 Docker 服务运行的协议转换代理
- DocumentDB:PostgreSQL 扩展,原生支持 MongoDB 协议
关键特性:
- 使用 MongoDB 协议(端口 27017),兼容 MongoDB 客户端
- 数据实际存储在 PostgreSQL(JSONB 格式)
- 保留 PostgreSQL 的 ACID 特性和事务支持
- 可结合 PostgreSQL 扩展(如 pgvector)使用
连接方式:
# 使用 mongosh 连接 FerretDB
mongosh "mongodb://dbuser_meta:DBUser.Meta@10.10.10.10:27017/ferretdb"
# 同时保留 PostgreSQL 连接能力
psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/ferretdb
适用场景:
- 从 MongoDB 迁移到 PostgreSQL
- 需要同时支持 MongoDB 和 SQL 的应用
- 希望在 PostgreSQL 上存储文档数据
- 需要利用 PostgreSQL 生态(如向量搜索)处理文档
注意事项:
- 部分 MongoDB 特性可能存在兼容性差异
- FerretDB 通过 Docker 运行,需要启用 Docker
- DocumentDB 扩展提供更原生的集成