1 - 配置总览
Pigsty 提供了一系列配置模板,覆盖从开发测试到生产部署的各种场景。在 configure 过程中使用 -c <conf> 参数指定配置模板。
./configure # 默认使用 meta.yml 配置模板
./configure -c meta # 显式使用 meta.yml 单节点模板
./configure -c rich # 功能丰富的单节点模板,包含所有扩展与 MinIO
./configure -c slim # 精简安装模板,不安装监控基础设施
# 使用不同的数据库内核
./configure -c pgsql # 原生 PostgreSQL 内核 (13~18)
./configure -c citus # Citus 分布式高可用集群 (14~17)
./configure -c mssql # Babelfish 内核,SQL Server 协议兼容 (15)
./configure -c polar # PolarDB PG 内核,Aurora/RAC 风格 (15)
./configure -c ivory # IvorySQL 内核,Oracle 语法兼容 (18)
./configure -c mysql # OpenHalo 内核,MySQL 协议兼容 (14)
./configure -c pgtde # Percona PostgreSQL,透明数据加密 (18)
./configure -c oriole # OrioleDB 内核,OLTP 增强 (17)
./configure -c supabase # 配置 Supabase 自托管 PostgreSQL (15~18)
./configure -c mongo # FerretDB/DocumentDB MongoDB 协议兼容
# 使用多节点高可用模板
./configure -c ha/dual # 双节点高可用模板
./configure -c ha/trio # 三节点标准高可用模板
./configure -c ha/full # 四节点完整功能模板
./configure -c ha/safe # 安全加固配置模板
单节点模板
单节点配置模板,适用于单机安装 Pigsty:
| 模板 | 说明 | GitHub |
|---|---|---|
| meta | 默认模板,单节点在线安装,包含完整基础设施 | conf/meta.yml |
| rich | 功能丰富模板,启用本地软件源、MinIO、更多扩展示例 | conf/rich.yml |
| slim | 精简安装模板,不部署监控基础设施,直接安装 PostgreSQL | conf/slim.yml |
| bare | 最精简配置模板,最小必需参数集合 | conf/demo/bare.yml |
| pitr | 云端对象存储 PITR 备份配置模板 | conf/pitr.yml |
| infra | 仅安装基础设施,不含 PostgreSQL 与 etcd | conf/demo/infra.yml |
多节点模板
生产环境多机部署的多节点高可用配置模板,位于 ha/ 子目录:
| 模板 | 节点数 | 说明 | GitHub |
|---|---|---|---|
| dual | 2 | 双节点半高可用部署 | conf/ha/dual.yml |
| trio | 3 | 三节点标准高可用部署 | conf/ha/trio.yml |
| full | 4 | 四节点完整功能演示环境 | conf/ha/full.yml |
| safe | 4 | 安全加固的高可用配置模板 | conf/ha/safe.yml |
内核模板
使用不同 PostgreSQL 内核分支变体的配置模板,全部为单节点演示模板:
| 模板 | PG 内核 | PG 版本 | 说明 | GitHub |
|---|---|---|---|---|
| pgsql | PostgreSQL | 13~18 | 原生 PostgreSQL 内核 | conf/pgsql.yml |
| citus | Citus | 14~17 | 分布式高可用 PostgreSQL | conf/citus.yml |
| mssql | Babelfish | 15 | SQL Server 协议兼容 | conf/mssql.yml |
| polar | PolarDB PG | 15 | Aurora/RAC 风格存算分离 | conf/polar.yml |
| ivory | IvorySQL | 18 | Oracle 语法兼容 | conf/ivory.yml |
| mysql | OpenHalo | 14 | MySQL 协议兼容 | conf/mysql.yml |
| pgtde | Percona TDE | 18 | 透明数据加密 (pg_tde) | conf/pgtde.yml |
| oriole | OrioleDB | 17 | OLTP 增强,无膨胀存储引擎 | conf/oriole.yml |
| mongo | FerretDB | 15~17 | MongoDB 协议兼容 | conf/mongo.yml |
演示模板
用于演示和展示的配置模板,位于 demo/ 子目录:
| 模板 | 说明 | GitHub |
|---|---|---|
| demo | Pigsty 公开演示站点配置 | conf/demo/demo.yml |
| minio | 四节点多盘高可用 MinIO 集群 | conf/demo/minio.yml |
应用模板
用于运行 Docker 应用的配置模板,位于 app/ 子目录:
| 模板 | 说明 | GitHub |
|---|---|---|
| supabase | Supabase 自托管开源 BaaS | conf/supabase.yml |
| dify | Dify AI 应用开发平台 | conf/app/dify.yml |
| odoo | Odoo 开源 ERP 系统 | conf/app/odoo.yml |
| electric | Electric 实时同步引擎 | conf/app/electric.yml |
| maybe | Maybe 个人财务管理 | conf/app/maybe.yml |
| teable | Teable 无代码数据库 | conf/app/teable.yml |
| registry | Docker Registry 镜像代理 | conf/app/registry.yml |
其他模板
其他用于特定场景的配置模板,位于 misc/ 子目录:
| 模板 | 说明 | GitHub |
|---|---|---|
| oss | 开源版离线软件包构建环境 | conf/build/oss.yml |
| pro | 专业版多版本构建环境 | conf/build/pro.yml |
| simu | 36节点生产环境仿真配置 | conf/simu.yml |
2 - 单节点模板
单节点配置模板适用于在单台服务器上安装 Pigsty。
| 模板 | 说明 |
|---|---|
| meta | 默认模板,单节点在线安装,包含完整基础设施 |
| rich | 功能丰富模板,启用本地软件源、MinIO、更多扩展示例 |
| slim | 精简安装模板,不部署监控基础设施,直接安装 PostgreSQL |
| bare | 最精简配置模板,最小化必需配置 |
| pitr | 云端对象存储 PITR 备份配置模板 |
| infra | 仅基础设施配置模板,不含 PostgreSQL |
2.1 - meta
meta 配置模板是 Pigsty 默认使用的模板,它的目标是在当前单节点上完成 Pigsty 核心功能 —— PostgreSQL 的部署。
为了实现最好的兼容性,meta 模板仅下载安装包含 最小必需 软件集合,以便在所有操作系统发行版与芯片架构上实现这一目标。
配置概览
- 配置名称:
meta - 节点数量: 单节点
- 配置说明:Pigsty 默认使用的单节点安装配置模板,带有较完善的关键配置参数说明,与最小可用功能集合。
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
rich,demo
使用方式:此配置模板为 Pigsty 默认配置模板,因此在 configure 时无需显式指定 -c meta 参数:
./configure [-i <primary_ip>]
例如,如果您想要安装 PG 17,而非默认的 PostgreSQL 18,可以在 configure 中使用 -v 参数:
./configure -v 17 # or 16,15,14,13....
配置内容
源文件地址:pigsty/conf/meta.yml
all:
children:
#----------------------------------------------#
# PGSQL : pg-meta 单节点 PostgreSQL 集群
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary } # <---- 主实例,可读可写
#x.xx.xx.xx: { pg_seq: 2, pg_role: replica } # <---- 从库实例,只读流量
#x.xx.xx.xy: { pg_seq: 3, pg_role: offline } # <---- 离线实例,ETL/交互查询
vars:
pg_cluster: pg-meta
# 安装并加载扩展: https://doc.pgsty.com/pgsql/extension
pg_extensions: [ postgis, pgvector ]
# 定义业务用户/角色 : https://doc.pgsty.com/pgsql/user
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 }
# 定义业务数据库 : https://doc.pgsty.com/pgsql/db
pg_databases:
- name: meta
baseline: cmdb.sql
comment: "pigsty meta database"
schemas: [pigsty]
extensions: [ postgis, vector ]
# 定义 HBA 规则 : https://doc.pgsty.com/pgsql/hba
pg_hba_rules:
- { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
# 定义备份策略: https://doc.pgsty.com/pgsql/backup
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ] # 每天凌晨1点全量备份
# 定义(可选)L2 VIP 绑定到主库
#pg_vip_enabled: true
#pg_vip_address: 10.10.10.2/24
#pg_vip_interface: eth1
#----------------------------------------------#
# INFRA : 基础设施组件
#----------------------------------------------#
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
vars:
repo_enabled: false # 单节点模式禁用本地软件源构建
#----------------------------------------------#
# ETCD : 高可用 DCS 服务
#----------------------------------------------#
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
vars:
etcd_cluster: etcd
etcd_safeguard: false # 是否防止误删除运行中的etcd实例?
#----------------------------------------------#
# MINIO : 可选的备份存储 (默认禁用)
#----------------------------------------------#
#minio:
# hosts:
# 10.10.10.10: { minio_seq: 1 }
# vars:
# minio_cluster: minio
# minio_users:
# - { access_key: pgbackrest ,secret_key: S3User.Backup ,policy: pgsql }
# - { access_key: s3user_meta ,secret_key: S3User.Meta ,policy: meta }
# - { access_key: s3user_data ,secret_key: S3User.Data ,policy: data }
#----------------------------------------------#
# DOCKER & APP : Docker 与应用程序
#----------------------------------------------#
# 使用 ./app.yml 启动 pgadmin (http://10.10.10.10:8885 admin@pigsty.cc / pigsty)
app:
hosts: { 10.10.10.10: {} }
vars:
docker_enabled: true # 使用 ./docker.yml 启用 Docker
app: pgadmin # 指定默认安装的应用
apps:
pgadmin:
conf:
PGADMIN_DEFAULT_EMAIL: admin@pigsty.cc
PGADMIN_DEFAULT_PASSWORD: pigsty
#==============================================================#
# 全局参数
#==============================================================#
vars:
#----------------------------------------------#
# INFRA 基础设施参数
#----------------------------------------------#
version: v4.0.0 # Pigsty 版本号
admin_ip: 10.10.10.10 # 管理节点 IP 地址
region: china # 上游镜像区域: default|china|europe
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"
# http_proxy: # 在此设置您的代理: 例如 http://user:pass@proxy.xxx.com
infra_portal: # 通过 Portal 暴露的基础设施服务
home : { domain: i.pigsty }
pgadmin : { domain: adm.pigsty ,endpoint: "${admin_ip}:8885" }
#minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
#----------------------------------------------#
# NODE 节点参数
#----------------------------------------------#
nodename_overwrite: false # 单节点模式不覆盖主机名
node_tune: oltp # 节点调优规格: oltp,olap,tiny,crit
node_etc_hosts: [ '${admin_ip} i.pigsty sss.pigsty' ]
node_repo_modules: 'node,infra,pgsql' # 直接将这些仓库添加到单节点
node_repo_remove: true # 移除 Pigsty 管理节点上的现有软件源
#----------------------------------------------#
# PGSQL PostgreSQL 参数
#----------------------------------------------#
pg_version: 18 # 默认 PostgreSQL 版本
pg_conf: oltp.yml # PostgreSQL 调优模板: {oltp,olap,tiny,crit}.yml
pg_safeguard: false # 是否防止误删除运行中的 PostgreSQL 实例?
pg_packages: [ pgsql-main, pgsql-common ] # PG 内核和常用工具
#pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
#----------------------------------------------#
# 备份配置 (可选 MinIO)
#----------------------------------------------#
# 如需使用 MinIO 作为备份仓库,请取消下方注释
#pgbackrest_method: minio
#pgbackrest_repo:
# local:
# path: /pg/backup
# retention_full_type: count
# retention_full: 2
# minio:
# type: s3
# s3_endpoint: sss.pigsty
# s3_region: us-east-1
# s3_bucket: pgsql
# s3_key: pgbackrest
# s3_key_secret: S3User.Backup
# ...
#----------------------------------------------#
# 密码配置 : https://doc.pgsty.com/config/security
#----------------------------------------------#
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
配置解读
meta 模板是 Pigsty 的默认入门配置,专为快速上手设计。
适用场景:
- 首次体验 Pigsty 的用户
- 开发测试环境的快速部署
- 单机运行的小型生产环境
- 作为更复杂部署的基础模板
关键特性:
- 在线安装模式,不构建本地软件源(
repo_enabled: false) - 默认安装 PostgreSQL 18,带有
postgis和pgvector扩展 - 包含完整的监控基础设施(Grafana、Prometheus、Loki 等)
- 预置 Docker 与 pgAdmin 应用示例
- MinIO 备份存储默认禁用,可按需启用
注意事项:
- 默认密码为示例密码,生产环境务必修改
- 单节点模式的 etcd 无高可用保障,适合开发测试
- 如需构建本地软件源,请使用
rich模板
2.2 - rich
配置模板 rich 是 meta 的增强版本,专为需要完整功能体验的用户设计。
如果您希望构建本地软件源、使用 MinIO 存储备份、运行 Docker 应用,或需要预置业务数据库,可以使用此模板。
配置概览
- 配置名称:
rich - 节点数量: 单节点
- 配置说明:功能丰富的单节点配置,在
meta基础上增加本地软件源、MinIO 备份、完整扩展、Docker 应用示例 - 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64(ARM 部分扩展不可用) - 相关配置:
meta,demo
此模板相比 meta 的主要增强:
- 构建本地软件源(
repo_enabled: true),下载所有 PG 扩展 - 启用单节点 MinIO 作为 PostgreSQL 备份存储
- 预置 TimescaleDB、pgvector、pg_wait_sampling 等扩展
- 包含详细的用户/数据库/服务定义注释示例
- 添加 Redis 主从实例示例
- 预置 pg-test 三节点高可用集群配置存根
启用方式:
./configure -c rich [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/rich.yml
all:
children:
#----------------------------------------------#
# PGSQL : pg-meta 单节点 PostgreSQL 集群
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta
# 安装并加载扩展
pg_extensions: [ postgis, timescaledb, pgvector, pg_wait_sampling ]
pg_libs: 'timescaledb, pg_stat_statements, auto_explain, pg_wait_sampling'
# 定义业务用户(含完整属性注释示例)
pg_users:
- name: dbuser_meta # 必填:用户名
password: DBUser.Meta # 可选:密码,支持 scram-sha-256 哈希或明文
login: true # 可选:是否允许登录,默认 true
superuser: false # 可选:是否超级用户,默认 false
createdb: false # 可选:是否可创建数据库,默认 false
createrole: false # 可选:是否可创建角色,默认 false
inherit: true # 可选:是否继承角色权限,默认 true
replication: false # 可选:是否可复制,默认 false
bypassrls: false # 可选:是否绕过行级安全,默认 false
pgbouncer: true # 可选:是否加入 pgbouncer 用户列表,默认 false
connlimit: -1 # 可选:连接数限制,默认 -1 不限制
expire_in: 3650 # 可选:N 天后过期(覆盖 expire_at)
expire_at: '2030-12-31' # 可选:过期时间戳(被 expire_in 覆盖)
comment: pigsty admin user # 可选:用户注释
roles: [dbrole_admin] # 可选:所属角色
parameters: {} # 可选:用户级参数
pool_mode: transaction # 可选:pgbouncer 池模式
pool_connlimit: -1 # 可选:pgbouncer 连接限制
- { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly], comment: read-only viewer }
# 定义业务数据库(含完整属性注释示例)
pg_databases:
- name: meta # 必填:数据库名
baseline: cmdb.sql # 可选:初始化 SQL 脚本
schemas: [ pigsty ] # 可选:额外创建的 schema
extensions: # 可选:安装的扩展
- vector
- postgis
- timescaledb
- { name: pg_wait_sampling, schema: monitor }
comment: pigsty meta database # 可选:数据库注释
#pgbouncer: true # 可选:是否加入 pgbouncer,默认 true
#owner: postgres # 可选:所有者,默认 postgres
#template: template1 # 可选:模板库,默认 template1
#encoding: UTF8 # 可选:编码,默认 UTF8
#locale: C # 可选:区域设置,默认 C
#tablespace: pg_default # 可选:默认表空间
#revokeconn: false # 可选:撤销公共连接权限
#connlimit: -1 # 可选:连接数限制
#pool_mode: transaction # 可选:pgbouncer 池模式
# 定义 HBA 规则
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' ]
# L2 VIP(可选)
#pg_vip_enabled: true
#pg_vip_address: 10.10.10.2/24
#pg_vip_interface: eth1
#----------------------------------------------#
# 高可用集群存根示例(需取消注释)
#----------------------------------------------#
#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, pg_offline_query: true }
# vars:
# pg_cluster: pg-test
# pg_users: [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
# pg_databases: [{ name: test }]
# pg_vip_enabled: true
# pg_vip_address: 10.10.10.3/24
# pg_vip_interface: eth1
#----------------------------------------------#
# INFRA : 基础设施(构建本地软件源)
#----------------------------------------------#
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
vars:
repo_enabled: true # 构建本地软件源
repo_extra_packages: [ pg18-main ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
#----------------------------------------------#
# ETCD : DCS 服务
#----------------------------------------------#
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
vars:
etcd_cluster: etcd
etcd_safeguard: false
#----------------------------------------------#
# MINIO : 备份存储
#----------------------------------------------#
minio:
hosts:
10.10.10.10: { minio_seq: 1 }
vars:
minio_cluster: minio
minio_users:
- { access_key: pgbackrest ,secret_key: S3User.Backup ,policy: pgsql }
- { access_key: s3user_meta ,secret_key: S3User.Meta ,policy: meta }
- { access_key: s3user_data ,secret_key: S3User.Data ,policy: data }
#----------------------------------------------#
# DOCKER & APP
#----------------------------------------------#
app:
hosts: { 10.10.10.10: {} }
vars:
docker_enabled: true
app: pgadmin
apps:
pgadmin:
conf:
PGADMIN_DEFAULT_EMAIL: admin@pigsty.cc
PGADMIN_DEFAULT_PASSWORD: pigsty
bytebase:
conf:
BB_DOMAIN: http://ddl.pigsty
BB_PGURL: "postgresql://dbuser_bytebase:DBUser.Bytebase@10.10.10.10:5432/bytebase?sslmode=prefer"
#----------------------------------------------#
# REDIS 示例
#----------------------------------------------#
redis-ms:
hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }
#==============================================================#
# 全局参数
#==============================================================#
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default # 使用默认上游镜像
certbot_sign: false # 启用 certbot 签发 HTTPS 证书
certbot_email: your@email.com # 接收证书过期通知的邮箱
infra_portal:
home : { domain: i.pigsty }
pgadmin : { domain: adm.pigsty ,endpoint: "${admin_ip}:8885" }
bytebase : { domain: ddl.pigsty ,endpoint: "${admin_ip}:8887" }
minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
#----------------------------------------------#
# NODE
#----------------------------------------------#
nodename_overwrite: false
node_tune: oltp
node_etc_hosts:
- '${admin_ip} i.pigsty sss.pigsty'
- '${admin_ip} adm.pigsty ddl.pigsty repo.pigsty supa.pigsty'
node_repo_modules: local # 使用本地软件源
node_repo_remove: true
#----------------------------------------------#
# PGSQL
#----------------------------------------------#
pg_version: 18
pg_conf: oltp.yml
pg_safeguard: false
pg_packages: [ pgsql-main, pgsql-common ]
#----------------------------------------------#
# BACKUP
#----------------------------------------------#
pgbackrest_method: minio # 使用 MinIO 作为备份存储
pgbackrest_repo:
local:
path: /pg/backup
retention_full_type: count
retention_full: 2
minio:
type: s3
s3_endpoint: sss.pigsty
s3_region: us-east-1
s3_bucket: pgsql
s3_key: pgbackrest
s3_key_secret: S3User.Backup
s3_uri_style: path
path: /pgbackrest
storage_port: 9000
storage_ca_file: /etc/pki/ca.crt
block: y # 块级增量备份
bundle: y # 小文件打包
cipher_type: aes-256-cbc # AES 加密
cipher_pass: pgBackRest
retention_full_type: time
retention_full: 14 # 保留 14 天全量备份
#----------------------------------------------#
# 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
配置解读
rich 模板是 Pigsty 的完整功能展示配置,适合需要深入体验所有功能的用户。
适用场景:
- 需要构建本地软件源的离线环境
- 需要使用 MinIO 作为 PostgreSQL 备份存储
- 需要预先规划多个业务数据库和用户
- 需要运行 Docker 应用(pgAdmin、Bytebase 等)
- 希望了解配置参数完整用法的学习者
与 meta 的主要区别:
- 启用本地软件源构建(
repo_enabled: true) - 启用 MinIO 存储备份(
pgbackrest_method: minio) - 预装 TimescaleDB、pg_wait_sampling 等额外扩展
- 包含详细的参数注释,便于理解配置含义
- 预置高可用集群存根配置(pg-test)
注意事项:
- ARM64 架构部分扩展不可用,请按需调整
- 构建本地软件源需要较长时间和较大磁盘空间
- 默认密码为示例密码,生产环境务必修改
2.3 - slim
slim 配置模板提供精简安装能力,在不部署 Infra 监控基础设施的前提下,直接从互联网安装 PostgreSQL 高可用集群。
当您只需要一个可用的数据库实例,不需要监控系统时,可以考虑使用 精简安装 模式。
配置概览
- 配置名称:
slim - 节点数量: 双节点
- 配置说明:精简安装配置模板,不部署监控基础设施
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
dual
启用方式:
./configure -c slim [-i <primary_ip>]
配置生成后,需要将占位 IP 10.10.10.11 修改为实际的从库节点 IP 地址。
配置内容
源文件地址:pigsty/conf/slim.yml
all:
children:
# 占位符:infra 组定义但不使用
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
# ETCD DCS 服务
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
vars:
etcd_cluster: etcd
# PostgreSQL 双节点高可用集群
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
10.10.10.11: { pg_seq: 2, pg_role: replica }
vars:
pg_cluster: pg-meta
pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: 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 for meta database }
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
node_tune: oltp
pg_conf: oltp.yml
# 精简安装设置:禁用监控基础设施
nginx_enabled: false
dns_enabled: false
prometheus_enabled: false
grafana_enabled: false
pg_exporter_enabled: false
pgbouncer_exporter_enabled: false
pg_vip_enabled: false
# 软件包配置
repo_modules: infra,node,pgsql
repo_remove: true
node_repo_modules: local
node_repo_remove: true
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
repo_extra_packages: [ pg18-main ]
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
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
配置解读
slim 模板是 Pigsty 的最小化安装配置,专为资源受限或仅需数据库功能的场景设计。
适用场景:
- 仅需要 PostgreSQL 数据库,不需要监控系统
- 资源有限的小型服务器或边缘设备
- 嵌入式场景或容器化部署
- 快速部署测试用的临时数据库
关键特性:
- 禁用所有监控组件(Prometheus、Grafana、Loki 等)
- 禁用 Nginx 反向代理和 DNS 服务
- 禁用 PostgreSQL Exporter 和 PgBouncer Exporter
- 保留核心 PostgreSQL 高可用能力(Patroni + etcd)
- 最小化软件包下载,加快安装速度
注意事项:
- 精简模式不提供监控能力,无法通过 Grafana 查看数据库状态
- 如需恢复监控功能,需要重新部署 Infra 模块
- 生产环境建议使用完整安装模式(
meta或rich)
2.4 - bare
配置模板 bare 是 Pigsty 所需的最精简配置
比这更少的配置模板将无法正常工作。
配置概览
- 配置名称:
bare - 节点数量: 单节点,
pigsty/vagrant/spec/meta.rb - 配置说明:Pigsty 最精简的单节点配置
- 配置内容:
pigsty/conf/demo/bare.yml - 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
meta
./configure -c bare [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/demo/bare.yml
all:
children:
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
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 } }
vars:
version: v3.2.2
admin_ip: 10.10.10.10
region: default
2.5 - pitr
配置模板 pitr 演示了在云上如何在只有单个 EC2 / ECS 服务器的情况下,
使用对象存储对数据库进行兜底性容灾。
配置概览
- 配置名称:
pitr - 节点数量: 单节点,
pigsty/vagrant/spec/meta.rb - 配置说明:单节点,利用云上远程对象存储进行持续备份与PITR,从而确保基础的 RTO/PRO。
- 配置内容:
pigsty/conf/pitr.yml - 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
meta - Terraform 模板(阿里云):
terraform/spec/aliyun-meta-s3.tf
./configure -c pitr [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/pitr.yml
# This 1-node template will use an external S3 (OSS) as backup storage
# which provide a basic level RTO / PRO in case of single point failure
# terraform template: terraform/spec/aliyun-meta-s3.tf
all:
#==============================================================#
# Clusters, Nodes, and Modules
#==============================================================#
children:
#----------------------------------#
# infra: monitor, alert, repo, etc..
#----------------------------------#
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
#----------------------------------#
# etcd cluster for HA postgres DCS
#----------------------------------#
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
vars:
etcd_cluster: etcd
#----------------------------------#
# minio (OPTIONAL backup repo)
#----------------------------------#
#minio:
# hosts:
# 10.10.10.10: { minio_seq: 1 }
# vars:
# minio_cluster: minio
#----------------------------------#
# pgsql (singleton on current node)
#----------------------------------#
# this is an example single-node postgres cluster with postgis & timescaledb installed, with one biz database & two biz users
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
vars:
pg_cluster: pg-meta # required identity parameter, usually same as group name
# define business databases here: https://pigsty.io/docs/pgsql/config/db/
pg_databases: # define business databases on this cluster, array of database definition
- name: meta # REQUIRED, `name` is the only mandatory field of a database definition
baseline: cmdb.sql # optional, database sql baseline path, (relative path among ansible search path, e.g: files/)
schemas: [ pigsty ] # optional, additional schemas to be created, array of schema names
extensions: # optional, additional extensions to be installed: array of `{name[,schema]}`
- { name: vector } # install pgvector extension on this database by default
comment: pigsty meta database # optional, comment string for this database
#pgbouncer: true # optional, add this database to pgbouncer database list? true by default
#owner: postgres # optional, database owner, postgres by default
#template: template1 # optional, which template to use, template1 by default
#encoding: UTF8 # optional, database encoding, UTF8 by default. (MUST same as template database)
#locale: C # optional, database locale, C by default. (MUST same as template database)
#lc_collate: C # optional, database collate, C by default. (MUST same as template database)
#lc_ctype: C # optional, database ctype, C by default. (MUST same as template database)
#tablespace: pg_default # optional, default tablespace, 'pg_default' by default.
#allowconn: true # optional, allow connection, true by default. false will disable connect at all
#revokeconn: false # optional, revoke public connection privilege. false by default. (leave connect with grant option to owner)
#register_datasource: true # optional, register this database to grafana datasources? true by default
#connlimit: -1 # optional, database connection limit, default -1 disable limit
#pool_auth_user: dbuser_meta # optional, all connection to this pgbouncer database will be authenticated by this user
#pool_mode: transaction # optional, pgbouncer pool mode at database level, default transaction
#pool_size: 64 # optional, pgbouncer pool size at database level, default 64
#pool_size_reserve: 32 # optional, pgbouncer pool size reserve at database level, default 32
#pool_size_min: 0 # optional, pgbouncer pool size min at database level, default 0
#pool_max_db_conn: 100 # optional, max database connections at database level, default 100
#- { name: grafana ,owner: dbuser_grafana ,revokeconn: true ,comment: grafana primary database } # define another database
# define business users here: https://pigsty.io/docs/pgsql/config/user/
pg_users: # define business users/roles on this cluster, array of user definition
- name: dbuser_meta # REQUIRED, `name` is the only mandatory field of a user definition
password: DBUser.Meta # optional, password, can be a scram-sha-256 hash string or plain text
login: true # optional, can log in, true by default (new biz ROLE should be false)
superuser: false # optional, is superuser? false by default
createdb: false # optional, can create database? false by default
createrole: false # optional, can create role? false by default
inherit: true # optional, can this role use inherited privileges? true by default
replication: false # optional, can this role do replication? false by default
bypassrls: false # optional, can this role bypass row level security? false by default
pgbouncer: true # optional, add this user to pgbouncer user-list? false by default (production user should be true explicitly)
connlimit: -1 # optional, user connection limit, default -1 disable limit
expire_in: 3650 # optional, now + n days when this role is expired (OVERWRITE expire_at)
expire_at: '2030-12-31' # optional, YYYY-MM-DD 'timestamp' when this role is expired (OVERWRITTEN by expire_in)
comment: pigsty admin user # optional, comment string for this user/role
roles: [dbrole_admin] # optional, belonged roles. default roles are: dbrole_{admin,readonly,readwrite,offline}
parameters: {} # optional, role level parameters with `ALTER ROLE SET`
pool_mode: transaction # optional, pgbouncer pool mode at user level, transaction by default
pool_connlimit: -1 # optional, max database connections at user level, default -1 disable limit
- { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly], comment: read-only viewer for meta database }
# define pg extensions: https://pigsty.io/docs/pgext/
pg_libs: 'pg_stat_statements, auto_explain' # add timescaledb to shared_preload_libraries
pg_extensions: [ pgvector ] # available extensions: https://pgext.cloud/zh/list
# define HBA rules here: https://pigsty.io/docs/pgsql/config/hba/#define-hba
pg_hba_rules: # example hba rules
- {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes'}
node_crontab: # make a full backup on monday 1am, and an incremental backup during weekdays
- '00 01 * * 1 postgres /pg/bin/pg-backup full'
- '00 01 * * 2,3,4,5,6,7 postgres /pg/bin/pg-backup'
#==============================================================#
# Global Parameters
#==============================================================#
vars:
#----------------------------------#
# Meta Data
#----------------------------------#
version: v3.2.2 # 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
proxy_env: # global proxy env when downloading packages
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"
# http_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
# https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
# all_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
infra_portal: # domain names and upstream servers
home : { domain: h.pigsty }
grafana : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
prometheus : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
blackbox : { endpoint: "${admin_ip}:9115" }
loki : { endpoint: "${admin_ip}:3100" }
#----------------------------------#
# MinIO Related Options
#----------------------------------#
# ADD YOUR AK/SK/REGION/ENDPOINT HERE
pgbackrest_method: s3 # if you want to use minio as backup repo instead of 'local' fs, uncomment this
pgbackrest_repo: # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
s3: # aliyun oss (s3 compatible) object storage service
type: s3 # oss is s3-compatible
s3_endpoint: oss-cn-beijing-internal.aliyuncs.com
s3_region: oss-cn-beijing
s3_bucket: <your_bucket_name>
s3_key: <your_access_key>
s3_key_secret: <your_secret_key>
s3_uri_style: host
path: /pgbackrest
bundle: y # bundle small files into a single file
cipher_type: aes-256-cbc # enable AES encryption for remote backup repo
cipher_pass: PG.${pg_cluster} # AES encryption password, default is 'pgBackRest'
retention_full_type: time # retention full backup by time on minio repo
retention_full: 14 # keep full backup for last 14 days
#----------------------------------#
# Credential: CHANGE THESE PASSWORDS
#----------------------------------#
#grafana_admin_username: admin
grafana_admin_password: pigsty
#pg_admin_username: dbuser_dba
pg_admin_password: DBUser.DBA
#pg_monitor_username: dbuser_monitor
pg_monitor_password: DBUser.Monitor
#pg_replication_username: replicator
pg_replication_password: DBUser.Replicator
#patroni_username: postgres
patroni_password: Patroni.API
#haproxy_admin_username: admin
haproxy_admin_password: pigsty
#----------------------------------#
# Safe Guard
#----------------------------------#
# you can enable these flags after bootstrap, to prevent purging running etcd / pgsql instances
etcd_safeguard: false # prevent purging running etcd instance?
pg_safeguard: false # prevent purging running postgres instance? false by default
#----------------------------------#
# Repo, Node, Packages
#----------------------------------#
# if you wish to customize your own repo, change these settings:
repo_modules: infra,node,pgsql
repo_remove: true # remove existing repo on admin node during repo bootstrap
node_repo_modules: local # install the local module in repo_upstream for all nodes
node_repo_remove: true # remove existing node repo for node managed by pigsty
repo_packages: [ # default packages to be downloaded
node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common #,docker
]
repo_extra_packages: [ # default postgres packages to be downloaded
pg17-main # replace with the following line if you want all extensions
#pg17-core ,pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-olap ,pg17-feat ,pg17-lang ,pg17-type ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl
]
pg_version: 17 # default postgres version
#pg_extensions: [ pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-olap ,pg17-feat ,pg17-lang ,pg17-type ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl ]
...
注意事项
你需要在 pgbackrest_repo 中填入对象存储桶的访问信息。
2.6 - infra
3 - 高可用模板
多节点高可用配置模板,适用于生产环境部署。
| 模板 | 节点数 | 说明 |
|---|---|---|
| dual | 2 | 双节点有限高可用部署 |
| trio | 3 | 三节点标准高可用部署 |
| full | 4 | 四节点完整功能演示环境 |
| safe | 4 | 安全加固的高可用配置模板 |
3.1 - dual
dual 模板使用双节点部署,实现一主一备的"半高可用"架构。如果您只有两台服务器,这是一个务实的选择。
配置概览
- 配置名称:
dual(位于ha/dual.yml) - 节点数量: 双节点
- 配置说明:两节点有限高可用部署,允许特定一台服务器宕机
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
trio,slim
启用方式:
./configure -c ha/dual [-i <primary_ip>]
配置生成后,需要将占位 IP 10.10.10.11 修改为实际的备库节点 IP 地址。
配置内容
源文件地址:pigsty/conf/ha/dual.yml
all:
children:
# INFRA 基础设施
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
# ETCD DCS 服务(单节点)
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
# MinIO 备份存储(可选)
#minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
# PostgreSQL 双节点高可用集群
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: replica } # <--- 备库,运行在管理节点
10.10.10.11: { pg_seq: 2, pg_role: primary } # <--- 主库,独立节点
vars:
pg_cluster: pg-meta
pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [ { name: 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 }
node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
pg_vip_enabled: true
pg_vip_address: 10.10.10.2/24
pg_vip_interface: eth1
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
node_tune: oltp
pg_conf: oltp.yml
infra_portal:
home : { domain: i.pigsty }
#minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
# 软件包配置
pg_version: 18
repo_modules: infra,node,pgsql
repo_remove: true
node_repo_modules: local
node_repo_remove: true
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
repo_extra_packages: [ pg18-main ]
#----------------------------------------------#
# 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
配置解读
dual 模板是 Pigsty 的双节点有限高可用配置,专为只有两台服务器的场景设计。
架构说明:
- 节点A (10.10.10.10):管理节点,运行 Infra + etcd + PostgreSQL 备库
- 节点B (10.10.10.11):数据节点,仅运行 PostgreSQL 主库
故障场景分析:
| 故障节点 | 影响 | 是否自动恢复 |
|---|---|---|
| 节点B 宕机 | 主库切换到节点A | 自动 |
| 节点A etcd 宕机 | 主库继续运行(无 DCS) | 需人工 |
| 节点A pgsql 宕机 | 主库继续运行 | 需人工 |
| 节点A 完全宕机 | 主库降级为单机 | 需人工 |
适用场景:
- 仅有两台服务器的预算受限环境
- 可接受部分故障场景需要人工介入
- 作为三节点高可用的过渡方案
注意事项:
- 真正的高可用需要至少三节点(DCS 需要多数派)
- 建议尽快升级到三节点架构
- L2 VIP 需要网络环境支持(同一广播域)
3.2 - trio
三节点是实现真正高可用的最小规格。trio 模板使用三节点标准 HA 架构,INFRA、ETCD、PGSQL 三个核心模块均采用三节点部署,允许任意一台服务器宕机。
配置概览
- 配置名称:
trio(位于ha/trio.yml) - 节点数量: 三节点
- 配置说明:三节点标准高可用架构,允许任意一台服务器宕机
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
dual,full,safe
启用方式:
./configure -c ha/trio [-i <primary_ip>]
配置生成后,需要将占位 IP 10.10.10.11 和 10.10.10.12 修改为实际的节点 IP 地址。
配置内容
源文件地址:pigsty/conf/ha/trio.yml
all:
children:
#----------------------------------------------#
# INFRA 三节点高可用基础设施
#----------------------------------------------#
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
10.10.10.11: { infra_seq: 2, repo_enabled: false }
10.10.10.12: { infra_seq: 3, repo_enabled: false }
vars:
patroni_watchdog_mode: off # 不在基础设施节点启用 watchdog
docker_enabled: true
#----------------------------------------------#
# ETCD 三节点高可用 DCS
#----------------------------------------------#
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
10.10.10.11: { etcd_seq: 2 }
10.10.10.12: { etcd_seq: 3 }
vars:
etcd_cluster: etcd
etcd_safeguard: false
etcd_clean: true
#----------------------------------------------#
# MinIO 备份存储(单节点)
#----------------------------------------------#
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
#----------------------------------------------#
# PostgreSQL 三节点高可用集群
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
10.10.10.11: { pg_seq: 2, pg_role: replica }
10.10.10.12: { pg_seq: 3, pg_role: replica , pg_offline_query: true }
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.View ,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 } ] }
pg_vip_enabled: true
pg_vip_address: 10.10.10.2/24
pg_vip_interface: eth1
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
node_tune: oltp
pg_conf: oltp.yml
infra_portal:
home : { domain: i.pigsty }
minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
# 软件包配置
pg_version: 18
repo_modules: infra,node,pgsql
repo_remove: true
node_repo_modules: local
node_repo_remove: true
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
repo_extra_packages: [ pg18-main ]
#----------------------------------------------#
# 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
配置解读
trio 模板是 Pigsty 的标准高可用配置,提供真正的故障自动恢复能力。
架构说明:
- 三节点 INFRA:Prometheus/Grafana/Nginx 分布式部署
- 三节点 ETCD:DCS 多数派选举,容忍单点故障
- 三节点 PostgreSQL:一主两从,自动故障转移
- 单节点 MinIO:可按需扩展为多节点
高可用保障:
- ETCD 三节点可容忍一节点故障,保持多数派
- PostgreSQL 主库故障时,Patroni 自动选举新主
- L2 VIP 随主库漂移,应用无需修改连接配置
适用场景:
- 生产环境最小高可用部署
- 需要自动故障转移的关键业务
- 作为更大规模部署的基础架构
扩展建议:
3.3 - full
full 配置模板是 Pigsty 推荐的沙箱演示环境,使用四个节点部署两套 PostgreSQL 集群,用于测试和演示 Pigsty 各方面的能力。
Pigsty 大部分教程和示例都基于此模板的沙箱环境。
配置概览
- 配置名称:
full(位于ha/full.yml) - 节点数量: 四节点
- 配置说明:四节点完整功能演示环境,带有两套 PostgreSQL 集群、MinIO、Redis 等组件示例
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
trio,safe,demo
启用方式:
./configure -c ha/full [-i <primary_ip>]
配置生成后,需要修改其他三个节点的 IP 地址。
配置内容
源文件地址:pigsty/conf/ha/full.yml
all:
children:
# INFRA 基础设施
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
# ETCD DCS 服务
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
vars:
etcd_cluster: etcd
# MinIO 备份存储
minio:
hosts:
10.10.10.10: { minio_seq: 1 }
vars:
minio_cluster: minio
# PostgreSQL 集群: pg-meta(单节点)
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' }
pg_vip_enabled: true
pg_vip_address: 10.10.10.2/24
pg_vip_interface: eth1
# PostgreSQL 集群: pg-test(三节点高可用)
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, pg_offline_query: true }
vars:
pg_cluster: pg-test
pg_users: [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
pg_databases: [{ name: test }]
pg_vip_enabled: true
pg_vip_address: 10.10.10.3/24
pg_vip_interface: eth1
#----------------------------------------------#
# Redis 示例
#----------------------------------------------#
redis-ms: # 主从模式
hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }
redis-meta: # 哨兵模式
hosts: { 10.10.10.11: { redis_node: 1 , redis_instances: { 26379: { } ,26380: { } ,26381: { } } } }
vars:
redis_cluster: redis-meta
redis_password: 'redis.meta'
redis_mode: sentinel
redis_max_memory: 16MB
redis_sentinel_monitor:
- { name: redis-ms, host: 10.10.10.10, port: 6379 ,password: redis.ms, quorum: 2 }
redis-test: # 原生集群模式
hosts:
10.10.10.12: { redis_node: 1 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
10.10.10.13: { redis_node: 2 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
vars: { redis_cluster: redis-test ,redis_password: 'redis.test' ,redis_mode: cluster, redis_max_memory: 32MB }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
node_tune: oltp
pg_conf: oltp.yml
infra_portal:
home : { domain: i.pigsty }
minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
# MinIO 备份配置
pgbackrest_method: minio
node_etc_hosts: [ '10.10.10.10 i.pigsty sss.pigsty' ]
# 软件包配置
pg_version: 18
repo_modules: infra,node,pgsql
repo_remove: true
node_repo_modules: local
node_repo_remove: true
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
repo_extra_packages: [ pg18-main ]
#----------------------------------------------#
# 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
配置解读
full 模板是 Pigsty 的完整功能演示配置,展示了多种组件的协同工作。
组件概览:
| 组件 | 节点分布 | 说明 |
|---|---|---|
| INFRA | 节点1 | 监控/告警/Nginx/DNS |
| ETCD | 节点1 | DCS 服务 |
| MinIO | 节点1 | S3 兼容存储 |
| pg-meta | 节点1 | 单节点 PostgreSQL |
| pg-test | 节点2-4 | 三节点高可用 PostgreSQL |
| redis-ms | 节点1 | Redis 主从模式 |
| redis-meta | 节点2 | Redis 哨兵模式 |
| redis-test | 节点3-4 | Redis 原生集群模式 |
适用场景:
- Pigsty 功能演示与学习
- 开发测试环境
- 评估高可用架构
- Redis 不同模式对比测试
与 trio 的区别:
- 增加了第二套 PostgreSQL 集群(pg-test)
- 增加了三种模式的 Redis 集群示例
- 基础设施使用单节点(而非三节点)
注意事项:
- 此模板主要用于演示和测试,生产环境请参考
trio或safe - 默认启用 MinIO 备份,如不需要可注释相关配置
3.4 - safe
safe 配置模板基于 trio 模板修改,是一个安全加固的专用配置模板,采用高标准的安全最佳实践。
配置概览
- 配置名称:
safe(位于ha/safe.yml) - 节点数量: 四节点
- 配置说明:安全加固的高可用配置模板,采用高标准的安全最佳实践
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64(部分安全扩展在 ARM64 不可用) - 相关配置:
trio,full
启用方式:
./configure -c ha/safe [-i <primary_ip>]
安全加固措施
safe 模板实现了以下安全加固:
- 强制 SSL 加密:PostgreSQL 和 PgBouncer 均启用 SSL
- 强密码策略:使用
passwordcheck扩展强制密码复杂度 - 用户过期时间:所有用户设置 20 年过期时间
- 最小化连接范围:限制 PostgreSQL/Patroni/PgBouncer 监听地址
- 严格 HBA 规则:强制 SSL 认证,管理员需证书认证
- 审计日志:记录连接和断开事件
- 延迟副本:可选的 1 小时延迟副本,用于误操作恢复
- 关键模板:使用
crit.yml调优模板,零数据丢失
配置内容
源文件地址:pigsty/conf/ha/safe.yml
all:
children:
#----------------------------------------------#
# INFRA 三节点高可用基础设施
#----------------------------------------------#
infra:
hosts:
10.10.10.10: { infra_seq: 1 }
10.10.10.11: { infra_seq: 2, repo_enabled: false }
10.10.10.12: { infra_seq: 3, repo_enabled: false }
vars: { patroni_watchdog_mode: off }
#----------------------------------------------#
# MinIO 备份存储
#----------------------------------------------#
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
#----------------------------------------------#
# ETCD 三节点高可用 DCS
#----------------------------------------------#
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 }
10.10.10.11: { etcd_seq: 2 }
10.10.10.12: { etcd_seq: 3 }
vars:
etcd_cluster: etcd
etcd_safeguard: false
etcd_clean: true
#----------------------------------------------#
# PostgreSQL 三节点高可用集群
#----------------------------------------------#
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1, pg_role: primary }
10.10.10.11: { pg_seq: 2, pg_role: replica }
10.10.10.12: { pg_seq: 3, pg_role: replica , pg_offline_query: true }
vars:
pg_cluster: pg-meta
pg_conf: crit.yml # 关键业务调优模板
pg_users:
- { name: dbuser_meta , password: Pleas3-ChangeThisPwd ,expire_in: 7300 ,pgbouncer: true ,roles: [ dbrole_admin ] ,comment: pigsty admin user }
- { name: dbuser_view , password: Make.3ure-Compl1ance ,expire_in: 7300 ,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 } ] }
pg_services:
- { name: standby , ip: "*" ,port: 5435 , dest: default ,selector: "[]" , backup: "[? pg_role == `primary`]" }
pg_listen: '${ip},${vip},${lo}' # 限制监听地址
pg_vip_enabled: true
pg_vip_address: 10.10.10.2/24
pg_vip_interface: eth1
#----------------------------------------------#
# 延迟副本(可选,1小时延迟)
#----------------------------------------------#
pg-meta-delay:
hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary, pg_upstream: 10.10.10.10, pg_delay: 1h } }
vars: { pg_cluster: pg-meta-delay }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
node_tune: oltp
pg_conf: oltp.yml
# 安全加固选项
patroni_ssl_enabled: true # Patroni API 启用 SSL
pgbouncer_sslmode: require # PgBouncer 强制 SSL
pg_default_service_dest: postgres # 默认直连 PostgreSQL 而非 PgBouncer
pgbackrest_method: minio # 使用 MinIO 远程备份
#----------------------------------------------#
# 强密码
#----------------------------------------------#
grafana_admin_password: You.Have2Use-A_VeryStrongPassword
pg_admin_password: PessWorb.Should8eStrong-eNough
pg_monitor_password: MekeSuerYour.PassWordI5secured
pg_replication_password: doNotUseThis-PasswordFor.AnythingElse
patroni_password: don.t-forget-to-change-thEs3-password
haproxy_admin_password: GneratePasswordWith-pwgen-s-16-1
#----------------------------------------------#
# MinIO 备份配置
#----------------------------------------------#
minio_users:
- { access_key: dba , secret_key: S3User.DBA.Strong.Password, policy: consoleAdmin }
- { access_key: pgbackrest , secret_key: Min10.bAckup ,policy: readwrite }
pgbackrest_repo:
local:
path: /pg/backup
retention_full_type: count
retention_full: 2
minio:
s3_key: pgbackrest
s3_key_secret: Min10.bAckup
cipher_pass: 'pgBR.${pg_cluster}' # 使用集群名作为加密密码
type: s3
s3_endpoint: sss.pigsty
s3_region: us-east-1
s3_bucket: pgsql
s3_uri_style: path
path: /pgbackrest
storage_port: 9000
storage_ca_file: /etc/pki/ca.crt
bundle: y
cipher_type: aes-256-cbc
retention_full_type: time
retention_full: 14
#----------------------------------------------#
# 强密码策略扩展
#----------------------------------------------#
pg_libs: '$libdir/passwordcheck, pg_stat_statements, auto_explain'
pg_extensions:
- passwordcheck, supautils, pgsodium, pg_vault, pg_session_jwt, anonymizer, pgsmcrypto, pgauditlogtofile, pgaudit
- pg_auth_mon, credcheck, pgcryptokey, pg_jobmon, logerrors, login_hook, set_user, pgextwlist, pg_auditor, sslutils, noset
#----------------------------------------------#
# 严格的默认角色配置
#----------------------------------------------#
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 ,expire_in: 7300 ,comment: system superuser }
- { name: replicator ,replication: true ,expire_in: 7300 ,roles: [ pg_monitor, dbrole_readonly ] ,comment: system replicator }
- { name: dbuser_dba ,superuser: true ,expire_in: 7300 ,roles: [ dbrole_admin ] ,pgbouncer: true ,pool_mode: session, pool_connlimit: 16 , comment: pgsql admin user }
- { name: dbuser_monitor ,roles: [ pg_monitor ] ,expire_in: 7300 ,pgbouncer: true ,parameters: { log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment: pgsql monitor user }
#----------------------------------------------#
# 严格的 HBA 规则
#----------------------------------------------#
pg_default_hba_rules:
- { user: '${dbsu}' ,db: all ,addr: local ,auth: ident ,title: 'dbsu access via local os user ident' }
- { user: '${dbsu}' ,db: replication ,addr: local ,auth: ident ,title: 'dbsu replication from local os ident' }
- { user: '${repl}' ,db: replication ,addr: localhost ,auth: ssl ,title: 'replicator replication from localhost' }
- { user: '${repl}' ,db: replication ,addr: intra ,auth: ssl ,title: 'replicator replication from intranet' }
- { user: '${repl}' ,db: postgres ,addr: intra ,auth: ssl ,title: 'replicator postgres db from intranet' }
- { user: '${monitor}' ,db: all ,addr: localhost ,auth: pwd ,title: 'monitor from localhost with password' }
- { user: '${monitor}' ,db: all ,addr: infra ,auth: ssl ,title: 'monitor from infra host with password' }
- { user: '${admin}' ,db: all ,addr: infra ,auth: ssl ,title: 'admin @ infra nodes with pwd & ssl' }
- { user: '${admin}' ,db: all ,addr: world ,auth: cert ,title: 'admin @ everywhere with ssl & cert' }
- { user: '+dbrole_readonly',db: all ,addr: localhost ,auth: ssl ,title: 'pgbouncer read/write via local socket' }
- { user: '+dbrole_readonly',db: all ,addr: intra ,auth: ssl ,title: 'read/write biz user via password' }
- { user: '+dbrole_offline' ,db: all ,addr: intra ,auth: ssl ,title: 'allow etl offline tasks from intranet' }
pgb_default_hba_rules:
- { user: '${dbsu}' ,db: pgbouncer ,addr: local ,auth: peer ,title: 'dbsu local admin access with os ident' }
- { user: 'all' ,db: all ,addr: localhost ,auth: pwd ,title: 'allow all user local access with pwd' }
- { user: '${monitor}' ,db: pgbouncer ,addr: intra ,auth: ssl ,title: 'monitor access via intranet with pwd' }
- { user: '${monitor}' ,db: all ,addr: world ,auth: deny ,title: 'reject all other monitor access addr' }
- { user: '${admin}' ,db: all ,addr: intra ,auth: ssl ,title: 'admin access via intranet with pwd' }
- { user: '${admin}' ,db: all ,addr: world ,auth: deny ,title: 'reject all other admin access addr' }
- { user: 'all' ,db: all ,addr: intra ,auth: ssl ,title: 'allow all user intra access with pwd' }
配置解读
safe 模板是 Pigsty 的安全加固配置,专为对安全性有较高要求的生产环境设计。
安全特性汇总:
| 安全措施 | 说明 |
|---|---|
| SSL 加密 | PostgreSQL/PgBouncer/Patroni 全链路 SSL |
| 强密码策略 | passwordcheck 扩展强制密码复杂度 |
| 用户过期 | 所有用户 20 年过期(expire_in: 7300) |
| 严格 HBA | 管理员远程访问需要证书认证 |
| 备份加密 | MinIO 备份启用 AES-256-CBC 加密 |
| 审计日志 | pgaudit 扩展记录 SQL 审计日志 |
| 延迟副本 | 1 小时延迟副本用于误操作恢复 |
适用场景:
- 金融、医疗、政务等高安全要求行业
- 需要满足合规审计要求的环境
- 对数据安全有极高要求的关键业务
注意事项:
- 部分安全扩展在 ARM64 架构不可用,请酌情启用
- 所有默认密码必须修改为强密码
- 建议配合定期安全审计使用
4 - 内核模板
使用不同 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 协议兼容 |
4.1 - pgsql
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 内核- 适合需要明确区分不同内核类型的场景
4.2 - citus
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 架构
4.3 - mssql
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.4 - polar
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 架构
4.5 - ivory
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
4.6 - 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 架构
4.7 - pgtde
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 架构
4.8 - oriole
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 架构
4.9 - mongo
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 扩展提供更原生的集成
5.1 - demo
demo 配置模板是 Pigsty 公开演示站点使用的配置文件,展示了如何对外暴露网站、配置 SSL 证书、安装全部扩展插件。
如果您希望在云服务器上搭建自己的公开服务,可以参考此配置模板。
配置概览
- 配置名称:
demo(位于demo/demo.yml) - 节点数量: 单节点
- 配置说明:Pigsty 公开演示站点配置
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta,rich
启用方式:
./configure -c demo/demo [-i <primary_ip>]
主要特性
此模板在 meta 基础上进行了以下增强:
- 配置 SSL 证书和自定义域名(如
pigsty.cc) - 下载并安装 PostgreSQL 18 所有可用扩展
- 启用 Docker 并配置镜像加速
- 部署 MinIO 对象存储
- 预置多个业务数据库和用户
- 添加 Redis 主从实例示例
- 添加 FerretDB MongoDB 兼容集群
- 添加 Kafka 样例集群
配置内容
源文件地址:pigsty/conf/demo/demo.yml
all:
children:
infra:
hosts: { 10.10.10.10: { infra_seq: 1 } }
vars:
nodename: pigsty.cc
node_id_from_pg: false
docker_enabled: true
docker_registry_mirrors: ["https://mirror.ccs.tencentyun.com"]
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
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 }
- {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
- {name: dbuser_grafana ,password: DBUser.Grafana ,pgbouncer: true ,roles: [dbrole_admin] ,comment: grafana user }
- {name: dbuser_odoo ,password: DBUser.Odoo ,pgbouncer: true ,roles: [dbrole_admin] ,createdb: true }
pg_databases:
- {name: meta ,baseline: cmdb.sql ,schemas: [pigsty] ,extensions: [{name: vector},{name: postgis},{name: timescaledb}]}
- {name: grafana ,owner: dbuser_grafana ,revokeconn: true }
- {name: odoo ,owner: dbuser_odoo ,revokeconn: true }
pg_libs: 'timescaledb, pg_stat_statements, auto_explain'
pg_extensions:
- timescaledb periods temporal_tables emaj table_version pg_cron pg_later pg_background
- postgis pgrouting pointcloud q3c geoip pg_polyline pg_geohash
- pgvector pgvectorscale pg_vectorize pg_similarity smlar pg_summarize pg_tiktoken pg4ml
- pg_search pg_bigm zhparser hunspell
- pg_analytics pg_duckdb duckdb_fdw pg_parquet pg_fkpart plproxy
# ... 更多扩展
redis-ms:
hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }
pg-mongo:
hosts: { 10.10.10.10: { mongo_seq: 1 } }
vars:
mongo_cluster: pg-mongo
mongo_pgurl: 'postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/grafana'
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: china
# SSL 证书和域名配置
infra_portal:
home : { domain: home.pigsty.cc }
cc : { domain: pigsty.cc ,path: "/www/pigsty.cc" ,cert: /etc/cert/pigsty.cc.crt ,key: /etc/cert/pigsty.cc.key }
grafana : { domain: demo.pigsty.cc ,endpoint: "${admin_ip}:3000" ,websocket: true ,cert: /etc/cert/demo.pigsty.cc.crt ,key: /etc/cert/demo.pigsty.cc.key }
prometheus : { domain: p.pigsty.cc ,endpoint: "${admin_ip}:9090" }
alertmanager : { domain: a.pigsty.cc ,endpoint: "${admin_ip}:9093" }
minio : { domain: m.pigsty.cc ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
# ... 更多服务域名
node_timezone: Asia/Hong_Kong
node_ntp_servers:
- pool cn.pool.ntp.org iburst
- pool ${admin_ip} iburst
# 下载 Docker 和全部扩展
repo_modules: infra,node,pgsql,docker
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, docker ]
pg_version: 18
repo_extra_packages: [pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl ]
配置解读
demo 模板是 Pigsty 的公开演示配置,展示了完整的生产级部署示例。
关键特性:
- 配置 HTTPS 证书和自定义域名
- 安装所有可用的 PostgreSQL 扩展
- 集成 Redis、FerretDB、Kafka 等组件
- 配置 Docker 镜像加速
适用场景:
- 搭建公开演示站点
- 需要完整功能展示的场景
- 学习 Pigsty 高级配置
注意事项:
- 需要准备 SSL 证书文件
- 需要配置 DNS 解析
- 部分扩展在 ARM64 架构不可用
5.2 - minio
minio 配置模板演示了如何部署一套四节点 x 四盘位、总计十六盘的高可用 MinIO 集群,提供 S3 兼容的对象存储服务。
更多教程,请参考 MINIO 模块文档。
配置概览
- 配置名称:
minio(位于demo/minio.yml) - 节点数量: 四节点
- 配置说明:高可用多节点多盘 MinIO 集群演示
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
meta
启用方式:
./configure -c demo/minio
备注:这是一个四节点模版,您需要在生成配置后修改其他三个节点的 IP 地址
配置内容
源文件地址:pigsty/conf/demo/minio.yml
all:
children:
# infra cluster for proxy, monitor, alert, etc..
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
# minio cluster with 4 nodes and 4 drivers per node
minio:
hosts:
10.10.10.10: { minio_seq: 1 , nodename: minio-1 }
10.10.10.11: { minio_seq: 2 , nodename: minio-2 }
10.10.10.12: { minio_seq: 3 , nodename: minio-3 }
10.10.10.13: { minio_seq: 4 , nodename: minio-4 }
vars:
minio_cluster: minio
minio_data: '/data{1...4}' # 每节点4盘
minio_buckets: # 创建存储桶
- { name: pgsql }
- { name: meta ,versioning: true }
- { name: data }
minio_users: # 创建用户
- { access_key: pgbackrest ,secret_key: S3User.Backup ,policy: pgsql }
- { access_key: s3user_meta ,secret_key: S3User.Meta ,policy: meta }
- { access_key: s3user_data ,secret_key: S3User.Data ,policy: data }
# 绑定 L2 VIP (10.10.10.9) 到 minio 集群(可选)
node_cluster: minio
vip_enabled: true
vip_vrid: 128
vip_address: 10.10.10.9
vip_interface: eth1
# 在所有节点上通过 HAProxy 暴露 MinIO 服务
haproxy_services:
- name: minio
port: 9002
balance: leastconn
options:
- option httpchk
- option http-keep-alive
- http-check send meth OPTIONS uri /minio/health/live
- http-check expect status 200
servers:
- { name: minio-1 ,ip: 10.10.10.10 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-2 ,ip: 10.10.10.11 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-3 ,ip: 10.10.10.12 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-4 ,ip: 10.10.10.13 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
# 每个 MinIO 节点的控制台访问域名
minio : { domain: m.pigsty ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
minio10 : { domain: m10.pigsty ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
minio11 : { domain: m11.pigsty ,endpoint: "10.10.10.11:9001" ,scheme: https ,websocket: true }
minio12 : { domain: m12.pigsty ,endpoint: "10.10.10.12:9001" ,scheme: https ,websocket: true }
minio13 : { domain: m13.pigsty ,endpoint: "10.10.10.13:9001" ,scheme: https ,websocket: true }
minio_endpoint: https://sss.pigsty:9002 # 使用 HAProxy 负载均衡端点
node_etc_hosts: ["10.10.10.9 sss.pigsty"] # VIP 域名解析
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
haproxy_admin_password: pigsty
minio_secret_key: S3User.MinIO
配置解读
minio 模板是 MinIO 生产级部署的参考配置,展示了多节点多盘 (MNMD) 架构。
关键特性:
- 多节点多盘架构:4 节点 × 4 盘 = 16 盘纠删码组
- L2 VIP 高可用:通过 Keepalived 绑定虚拟 IP
- HAProxy 负载均衡:9002 端口统一访问入口
- 细粒度权限:为不同应用创建独立用户和存储桶
访问方式:
# 使用 mcli 配置 MinIO 别名(通过 HAProxy 负载均衡)
mcli alias set sss https://sss.pigsty:9002 minioadmin S3User.MinIO
# 列出存储桶
mcli ls sss/
# 使用控制台
# 访问 https://m.pigsty 或 https://m10-m13.pigsty
适用场景:
- 需要 S3 兼容对象存储的环境
- PostgreSQL 备份存储(pgBackRest 远程仓库)
- 大数据和 AI 工作负载的数据湖
- 需要高可用对象存储的生产环境
注意事项:
- 每个节点需要准备 4 块独立磁盘挂载到
/data1-/data4 - 生产环境建议至少 4 节点以实现纠删码冗余
- VIP 需要正确配置网络接口(
vip_interface) - 节点间需要能够互相解析
minio-{1...4}.pigsty域名
6 - 应用模板
用于运行 Docker 应用的配置模板。
| 模板 | 说明 |
|---|---|
| supabase | Supabase 自托管开源 BaaS |
| dify | Dify AI 应用开发平台 |
| odoo | Odoo 开源 ERP 系统 |
| electric | Electric 实时同步引擎 |
| maybe | Maybe 个人财务管理 |
| teable | Teable 无代码数据库 |
| registry | Docker Registry 镜像代理 |
6.1 - supabase
supabase 配置模板提供了自建 Supabase 的参考配置,使用 Pigsty 托管的 PostgreSQL 作为底层存储。
更多细节,请参考 Supabase 自建教程
配置概览
- 配置名称:
supabase - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 自建 Supabase
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta,rich
启用方式:
./configure -c supabase [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/supabase.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 } }
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
#----------------------------------------------#
# PostgreSQL cluster for Supabase self-hosting
#----------------------------------------------#
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_users:
# supabase 角色
- { name: anon ,login: false }
- { name: authenticated ,login: false }
- { name: dashboard_user ,login: false ,replication: true ,createdb: true ,createrole: true }
- { name: service_role ,login: false ,bypassrls: true }
# supabase 用户
- { name: supabase_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: true ,roles: [ dbrole_admin ] ,superuser: true ,replication: true ,createdb: true ,createrole: true ,bypassrls: true }
- { name: authenticator ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] }
- { name: supabase_auth_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin ] ,createrole: true }
- { name: supabase_storage_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] ,createrole: true }
- { name: supabase_functions_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin ] ,createrole: true }
- { name: supabase_replication_admin ,password: 'DBUser.Supa' ,replication: true ,roles: [ dbrole_admin ]}
- { name: supabase_etl_admin ,password: 'DBUser.Supa' ,replication: true ,roles: [ pg_read_all_data ]}
- { name: supabase_read_only_user ,password: 'DBUser.Supa' ,bypassrls: true ,roles: [ pg_read_all_data, dbrole_readonly ]}
pg_databases:
- name: postgres
baseline: supabase.sql
owner: supabase_admin
comment: supabase postgres database
schemas: [ extensions ,auth ,realtime ,storage ,graphql_public ,supabase_functions ,_analytics ,_realtime ]
extensions:
- { name: pgcrypto ,schema: extensions }
- { name: pg_net ,schema: extensions }
- { name: pgjwt ,schema: extensions }
- { name: uuid-ossp ,schema: extensions }
- { name: pgsodium ,schema: extensions }
- { name: supabase_vault ,schema: extensions }
- { name: pg_graphql ,schema: extensions }
- { name: pg_jsonschema ,schema: extensions }
- { name: wrappers ,schema: extensions }
- { name: http ,schema: extensions }
- { name: pg_cron ,schema: extensions }
- { name: timescaledb ,schema: extensions }
- { name: pg_tle ,schema: extensions }
- { name: vector ,schema: extensions }
- { name: pgmq ,schema: extensions }
- { name: supabase ,owner: supabase_admin ,comment: supabase analytics database }
pg_libs: 'timescaledb, pgsodium, plpgsql, plpgsql_check, pg_cron, pg_net, pg_stat_statements, auto_explain, pg_wait_sampling, pg_tle, plan_filter'
pg_extensions: [ pg18-main ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
pg_parameters: { cron.database_name: postgres }
pg_hba_rules:
- { user: all ,db: postgres ,addr: intra ,auth: pwd ,title: 'allow supabase access from intranet' }
- { user: all ,db: postgres ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow access from local docker network' }
node_crontab:
- '00 01 * * * postgres /pg/bin/pg-backup full'
- '* * * * * postgres /pg/bin/supa-kick' # 处理 _analytics 延迟问题
#----------------------------------------------#
# Supabase 无状态容器 (默认用户密码: supabase/pigsty)
#----------------------------------------------#
supabase:
hosts: { 10.10.10.10: {} }
vars:
docker_enabled: true
app: supabase
apps:
supabase:
conf:
# 重要:修改 JWT_SECRET 并重新生成凭据!
JWT_SECRET: your-super-secret-jwt-token-with-at-least-32-characters-long
ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SERVICE_ROLE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
PG_META_CRYPTO_KEY: your-encryption-key-32-chars-min
DASHBOARD_USERNAME: supabase
DASHBOARD_PASSWORD: pigsty
LOGFLARE_PUBLIC_ACCESS_TOKEN: 1234567890abcdef...
LOGFLARE_PRIVATE_ACCESS_TOKEN: fedcba0987654321...
# PostgreSQL 连接配置
POSTGRES_HOST: 10.10.10.10
POSTGRES_PORT: 5436
POSTGRES_DB: postgres
POSTGRES_PASSWORD: DBUser.Supa
# Supabase 外部访问地址
SITE_URL: https://supa.pigsty
API_EXTERNAL_URL: https://supa.pigsty
SUPABASE_PUBLIC_URL: https://supa.pigsty
# S3/MinIO 文件存储配置
S3_BUCKET: data
S3_ENDPOINT: https://sss.pigsty:9000
S3_ACCESS_KEY: s3user_data
S3_SECRET_KEY: S3User.Data
MINIO_DOMAIN_IP: 10.10.10.10
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
supa : { domain: supa.pigsty ,endpoint: "10.10.10.10:8000" ,websocket: true ,certbot: supa.pigsty }
node_etc_hosts: [ "10.10.10.10 i.pigsty sss.pigsty supa.pigsty" ]
# 使用 MinIO 作为 PostgreSQL 备份存储
minio_endpoint: https://sss.pigsty:9000
pgbackrest_method: minio
pgbackrest_repo:
minio:
type: s3
s3_endpoint: sss.pigsty
s3_bucket: pgsql
s3_key: pgbackrest
s3_key_secret: S3User.Backup
# ... 更多配置
pg_version: 18
#----------------------------------------------#
# 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
配置解读
supabase 模板提供了完整的 Supabase 自建方案,让您可以在自己的基础设施上运行这个开源 Firebase 替代品。
架构组成:
- PostgreSQL:Pigsty 托管的生产级 PostgreSQL(支持高可用)
- Docker 容器:Supabase 无状态服务(Auth、Storage、Realtime、Edge Functions 等)
- MinIO:S3 兼容的对象存储,用于文件存储和 PostgreSQL 备份
- Nginx:反向代理和 HTTPS 终止
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 替代 Supabase 自带的数据库容器
- 支持 PostgreSQL 高可用(可扩展为三节点集群)
- 安装全部 Supabase 所需扩展(pg_net、pgjwt、pg_graphql、vector 等)
- 集成 MinIO 对象存储用于文件上传和备份
- 支持 HTTPS 和 Let’s Encrypt 自动证书
部署步骤:
curl https://repo.pigsty.io/get | bash # 下载 Pigsty
./configure -c supabase # 使用 supabase 配置模板
./install.yml # 安装 Pigsty、PostgreSQL、MinIO
./docker.yml # 安装 Docker
./app.yml # 启动 Supabase 容器
访问方式:
# Supabase Studio
https://supa.pigsty (用户名: supabase, 密码: pigsty)
# 直接连接 PostgreSQL
psql postgres://supabase_admin:DBUser.Supa@10.10.10.10:5432/postgres
适用场景:
- 需要自建 BaaS (Backend as a Service) 平台
- 希望完全掌控数据和基础设施
- 需要企业级 PostgreSQL 高可用和备份
- 对 Supabase 云服务有合规或成本考虑
注意事项:
- 必须修改 JWT_SECRET:使用至少 32 字符的随机字符串,并重新生成 ANON_KEY 和 SERVICE_ROLE_KEY
- 需要配置正确的域名(
SITE_URL、API_EXTERNAL_URL) - 生产环境建议启用 HTTPS(可使用 certbot 自动签发证书)
- Docker 网络需要能访问 PostgreSQL(已配置 172.17.0.0/16 HBA 规则)
6.2 - dify
dify 配置模板提供了自建 Dify AI 应用开发平台的参考配置,使用 Pigsty 托管的 PostgreSQL 和 pgvector 作为向量存储。
更多细节,请参考 Dify 部署教程
配置概览
- 配置名称:
dify(位于app/dify.yml) - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Dify
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c app/dify [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/dify.yml
all:
children:
# Dify 应用
dify:
hosts: { 10.10.10.10: {} }
vars:
app: dify
apps:
dify:
file:
- { path: /data/dify ,state: directory ,mode: 0755 }
conf:
NGINX_SERVER_NAME: dify.pigsty
SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U # 请修改!
DIFY_PORT: 5001
DIFY_DATA: /data/dify
# 数据库配置
DB_USERNAME: dify
DB_PASSWORD: difyai123456
DB_HOST: 10.10.10.10
DB_PORT: 5432
DB_DATABASE: dify
# pgvector 向量存储配置
VECTOR_STORE: pgvector
PGVECTOR_HOST: 10.10.10.10
PGVECTOR_PORT: 5432
PGVECTOR_USER: dify
PGVECTOR_PASSWORD: difyai123456
PGVECTOR_DATABASE: dify
# PostgreSQL 数据库
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_users:
- { name: dify ,password: difyai123456 ,pgbouncer: true ,roles: [ dbrole_admin ] ,superuser: true }
pg_databases:
- { name: dify ,owner: dify ,revokeconn: true ,comment: dify main database }
- { name: dify_plugin ,owner: dify ,revokeconn: true ,comment: dify plugin database }
pg_hba_rules:
- { user: dify ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow dify from docker' }
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
docker_enabled: true
infra_portal:
home : { domain: i.pigsty }
dify : { domain: dify.pigsty ,endpoint: "10.10.10.10:5001" ,websocket: true ,certbot: dify.pigsty }
repo_enabled: false
node_repo_modules: node,infra,pgsql
pg_version: 18
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
dify 模板提供了 Dify AI 应用开发平台的一键部署方案。
Dify 是什么:
- 开源的 LLM 应用开发平台
- 支持 RAG、Agent、Workflow 等 AI 应用模式
- 提供可视化的 Prompt 编排和应用构建界面
- 支持多种 LLM 后端(OpenAI、Claude、本地模型等)
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 替代 Dify 自带的数据库
- 使用 pgvector 作为向量存储(替代 Weaviate/Qdrant)
- 支持 HTTPS 和自定义域名
- 数据持久化到独立目录
/data/dify
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/dify
vi pigsty.yml # 修改密码和域名
./install.yml # 安装 Pigsty 和 PostgreSQL
./docker.yml # 安装 Docker
./app.yml # 启动 Dify 容器
访问方式:
# Dify Web 界面
http://dify.pigsty:5001
# 或通过 Nginx 代理
https://dify.pigsty
适用场景:
- 需要自建 AI 应用开发平台
- 希望使用 PostgreSQL + pgvector 作为向量存储
- 需要完全掌控 AI 应用的数据和基础设施
- 企业内部 AI 应用开发和部署
注意事项:
- 必须修改
SECRET_KEY,使用openssl rand -base64 42生成 - 需要配置 LLM API 密钥(如 OpenAI API Key)
- Docker 网络需要能访问 PostgreSQL(已配置 172.17.0.0/16 HBA 规则)
- 建议配置代理以加速 Python 包下载
6.3 - odoo
odoo 配置模板提供了自建 Odoo 开源 ERP 系统的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。
更多细节,请参考 Odoo 部署教程
配置概览
- 配置名称:
odoo(位于app/odoo.yml) - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Odoo ERP
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c app/odoo [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/odoo.yml
all:
children:
# Odoo 应用 (默认用户密码: admin/admin)
odoo:
hosts: { 10.10.10.10: {} }
vars:
app: odoo
apps:
odoo:
file:
- { path: /data/odoo ,state: directory, owner: 100, group: 101 }
- { path: /data/odoo/webdata ,state: directory, owner: 100, group: 101 }
- { path: /data/odoo/addons ,state: directory, owner: 100, group: 101 }
conf:
PG_HOST: 10.10.10.10
PG_PORT: 5432
PG_USERNAME: odoo
PG_PASSWORD: DBUser.Odoo
ODOO_PORT: 8069
ODOO_DATA: /data/odoo/webdata
ODOO_ADDONS: /data/odoo/addons
ODOO_DBNAME: odoo
ODOO_VERSION: 19.0
# Odoo 数据库
pg-odoo:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-odoo
pg_users:
- { name: odoo ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_admin ] ,createdb: true }
- { name: odoo_ro ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_readonly ] }
- { name: odoo_rw ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_readwrite ] }
pg_databases:
- { name: odoo ,owner: odoo ,revokeconn: true ,comment: odoo main database }
pg_hba_rules:
- { user: all ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow access from docker' }
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
docker_enabled: true
infra_portal:
home : { domain: i.pigsty }
odoo : { domain: odoo.pigsty ,endpoint: "10.10.10.10:8069" ,websocket: true ,certbot: odoo.pigsty }
repo_enabled: false
node_repo_modules: node,infra,pgsql
pg_version: 18
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
odoo 模板提供了 Odoo 开源 ERP 系统的一键部署方案。
Odoo 是什么:
- 全球最流行的开源 ERP 系统
- 覆盖 CRM、销售、采购、库存、财务、HR 等企业管理模块
- 支持数千个社区和官方应用扩展
- 提供 Web 界面和移动端支持
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 替代 Odoo 自带的数据库
- 支持 Odoo 19.0 最新版本
- 数据持久化到独立目录
/data/odoo - 支持自定义插件目录
/data/odoo/addons
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/odoo
vi pigsty.yml # 修改密码和域名
./install.yml # 安装 Pigsty 和 PostgreSQL
./docker.yml # 安装 Docker
./app.yml # 启动 Odoo 容器
访问方式:
# Odoo Web 界面
http://odoo.pigsty:8069
# 默认管理员账号
用户名: admin
密码: admin (首次登录时设置)
适用场景:
- 中小企业 ERP 系统部署
- 需要完整的企业管理功能套件
- 希望自建而非使用 SaaS 服务
- 需要企业级 PostgreSQL 高可用和备份
注意事项:
- Odoo 容器以 uid=100, gid=101 运行,数据目录需要正确的权限
- 首次访问时需要创建数据库和设置管理员密码
- 生产环境建议启用 HTTPS
- 可通过
/data/odoo/addons安装自定义模块
6.4 - electric
electric 配置模板提供了部署 Electric SQL 实时同步服务的参考配置,实现 PostgreSQL 到客户端的实时数据同步。
更多细节,请参考 Electric 部署教程
配置概览
- 配置名称:
electric(位于app/electric.yml) - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Electric 实时同步
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c app/electric [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/electric.yml
all:
children:
infra:
hosts: { 10.10.10.10: { infra_seq: 1 } }
vars:
app: electric
apps:
electric:
conf:
DATABASE_URL: 'postgresql://electric:DBUser.Electric@10.10.10.10:5432/electric?sslmode=require'
ELECTRIC_PORT: 8002
ELECTRIC_PROMETHEUS_PORT: 8003
ELECTRIC_INSECURE: true
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: electric ,password: DBUser.Electric ,pgbouncer: true ,replication: true ,roles: [dbrole_admin] }
pg_databases:
- { name: electric ,owner: electric }
pg_hba_rules:
- { user: electric ,db: replication ,addr: infra ,auth: ssl ,title: 'allow electric ssl access' }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
docker_enabled: true
infra_portal:
home : { domain: i.pigsty }
electric : { domain: elec.pigsty ,endpoint: "${admin_ip}:8002" ,websocket: true }
repo_enabled: false
node_repo_modules: node,infra,pgsql
pg_version: 18
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
electric 模板提供了 Electric SQL 实时同步服务的一键部署方案。
Electric 是什么:
- PostgreSQL 到客户端的实时数据同步服务
- 支持离线优先 (Local-first) 应用架构
- 通过逻辑复制实时同步数据变更
- 提供 HTTP API 供前端应用消费
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 作为数据源
- 通过逻辑复制 (Logical Replication) 捕获数据变更
- 支持 SSL 加密连接
- 内置 Prometheus 指标端点
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/electric
vi pigsty.yml # 修改密码和域名
./install.yml # 安装 Pigsty 和 PostgreSQL
./docker.yml # 安装 Docker
./app.yml # 启动 Electric 容器
访问方式:
# Electric API 端点
http://elec.pigsty:8002
# Prometheus 指标
http://elec.pigsty:8003/metrics
# 在前端应用中使用
const electric = new ElectricClient({
url: 'http://elec.pigsty:8002'
});
适用场景:
- 构建离线优先 (Local-first) 应用
- 需要实时数据同步到客户端
- 移动应用和 PWA 的数据同步
- 协作应用的实时更新
注意事项:
- Electric 用户需要
replication权限 - 需要启用 PostgreSQL 逻辑复制
- 生产环境建议使用 SSL 连接(已配置
sslmode=require) - 可通过
ELECTRIC_INSECURE: false启用安全模式
6.5 - maybe
maybe 配置模板提供了部署 Maybe 开源个人财务管理系统的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。
更多细节,请参考 Maybe 部署教程
配置概览
- 配置名称:
maybe(位于app/maybe.yml) - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Maybe 财务管理
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c app/maybe [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/maybe.yml
all:
children:
# Maybe 应用 (个人财务管理)
maybe:
hosts: { 10.10.10.10: {} }
vars:
app: maybe
apps:
maybe:
file:
- { path: /data/maybe ,state: directory ,mode: 0755 }
- { path: /data/maybe/storage ,state: directory ,mode: 0755 }
conf:
MAYBE_VERSION: latest
MAYBE_PORT: 5002
MAYBE_DATA: /data/maybe
APP_DOMAIN: maybe.pigsty
# 必须修改:使用 openssl rand -hex 64 生成
SECRET_KEY_BASE: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
# 数据库配置
DB_HOST: 10.10.10.10
DB_PORT: 5432
DB_USERNAME: maybe
DB_PASSWORD: MaybeFinance2025
DB_DATABASE: maybe_production
# Maybe 数据库
pg-maybe:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-maybe
pg_users:
- { name: maybe ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_admin ] ,createdb: true }
- { name: maybe_ro ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_readonly ] }
- { name: maybe_rw ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_readwrite ] }
pg_databases:
- { name: maybe_production ,owner: maybe ,revokeconn: true ,comment: maybe main database }
pg_hba_rules:
- { user: maybe ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow maybe from docker' }
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
docker_enabled: true
infra_portal:
home : { domain: i.pigsty }
maybe : { domain: maybe.pigsty ,endpoint: "10.10.10.10:5002" ,websocket: true }
repo_enabled: false
node_repo_modules: node,infra,pgsql
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
maybe 模板提供了 Maybe 开源个人财务管理系统的一键部署方案。
Maybe 是什么:
- 开源的个人和家庭财务管理系统
- 支持多账户、多币种资产追踪
- 提供投资组合分析和净值计算
- 美观现代的 Web 界面
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 替代 Maybe 自带的数据库
- 数据持久化到独立目录
/data/maybe - 支持 HTTPS 和自定义域名
- 提供多用户权限管理
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/maybe
vi pigsty.yml # 修改密码和域名
./install.yml # 安装 Pigsty 和 PostgreSQL
./docker.yml # 安装 Docker
./app.yml # 启动 Maybe 容器
访问方式:
# Maybe Web 界面
http://maybe.pigsty:5002
# 或通过 Nginx 代理
https://maybe.pigsty
适用场景:
- 个人或家庭财务管理
- 投资组合追踪和分析
- 多账户资产汇总
- 替代 Mint、YNAB 等商业服务
注意事项:
- 必须修改
SECRET_KEY_BASE,使用openssl rand -hex 64生成 - 首次访问时需要注册管理员账号
- 可选配置 Synth API 以获取股票价格数据
- Docker 网络需要能访问 PostgreSQL
6.6 - teable
teable 配置模板提供了部署 Teable 开源无代码数据库的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。
更多细节,请参考 Teable 部署教程
配置概览
- 配置名称:
teable(位于app/teable.yml) - 节点数量: 单节点
- 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Teable
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64 - 相关配置:
meta
启用方式:
./configure -c app/teable [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/teable.yml
all:
children:
# Teable 应用
teable:
hosts: { 10.10.10.10: {} }
vars:
app: teable
apps:
teable:
conf:
POSTGRES_HOST: "10.10.10.10"
POSTGRES_PORT: "5432"
POSTGRES_DB: "teable"
POSTGRES_USER: "dbuser_teable"
POSTGRES_PASSWORD: "DBUser.Teable"
PRISMA_DATABASE_URL: "postgresql://dbuser_teable:DBUser.Teable@10.10.10.10:5432/teable"
PUBLIC_ORIGIN: "http://tea.pigsty"
PUBLIC_DATABASE_PROXY: "10.10.10.10:5432"
TIMEZONE: "UTC"
# Teable 数据库
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_users:
- { name: dbuser_teable ,password: DBUser.Teable ,pgbouncer: true ,roles: [ dbrole_admin ] ,superuser: true }
pg_databases:
- { name: teable ,owner: dbuser_teable ,comment: teable database }
pg_hba_rules:
- { user: teable ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow teable from docker' }
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
docker_enabled: true
infra_portal:
home : { domain: i.pigsty }
teable : { domain: tea.pigsty ,endpoint: "10.10.10.10:8890" ,websocket: true ,certbot: tea.pigsty }
repo_enabled: false
node_repo_modules: node,infra,pgsql
pg_version: 18
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
teable 模板提供了 Teable 开源无代码数据库的一键部署方案。
Teable 是什么:
- 开源的 Airtable 替代品
- 基于 PostgreSQL 的无代码数据库
- 支持表格、看板、日历、表单等多种视图
- 提供 API 和自动化工作流
关键特性:
- 使用 Pigsty 管理的 PostgreSQL 作为底层存储
- 数据实际存储在真实的 PostgreSQL 表中
- 支持 SQL 直接查询数据
- 可与其他 PostgreSQL 工具和扩展集成
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/teable
vi pigsty.yml # 修改密码和域名
./install.yml # 安装 Pigsty 和 PostgreSQL
./docker.yml # 安装 Docker
./app.yml # 启动 Teable 容器
访问方式:
# Teable Web 界面
http://tea.pigsty:8890
# 或通过 Nginx 代理
https://tea.pigsty
# 同时可以直接 SQL 访问底层数据
psql postgresql://dbuser_teable:DBUser.Teable@10.10.10.10:5432/teable
适用场景:
- 需要 Airtable 类似功能但希望自建
- 团队协作数据管理
- 需要同时支持 API 和 SQL 访问
- 希望数据存储在真实 PostgreSQL 中
注意事项:
- Teable 用户需要 superuser 权限
- 需要正确配置
PUBLIC_ORIGIN为外部访问地址 - 支持邮件通知(可选配置 SMTP)
- Docker 网络需要能访问 PostgreSQL
6.7 - registry
registry 配置模板提供了部署 Docker Registry 镜像代理的参考配置,可用作 Docker Hub 镜像加速或私有镜像仓库。
更多细节,请参考 Registry 部署教程
配置概览
- 配置名称:
registry(位于app/registry.yml) - 节点数量: 单节点
- 配置说明:部署 Docker Registry 镜像代理和私有仓库
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64,aarch64 - 相关配置:
meta
启用方式:
./configure -c app/registry [-i <primary_ip>]
配置内容
源文件地址:pigsty/conf/app/registry.yml
all:
children:
# Docker Registry 镜像代理
registry:
hosts: { 10.10.10.10: {} }
vars:
app: registry
apps:
registry:
file:
- { path: /data/registry ,state: directory ,mode: 0755 }
conf:
REGISTRY_DATA: /data/registry
REGISTRY_PORT: 5000
REGISTRY_UI_PORT: 5080
REGISTRY_STORAGE_DELETE_ENABLED: true
REGISTRY_LOG_LEVEL: info
REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
REGISTRY_PROXY_TTL: 168h # 缓存 7 天
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
vars:
version: v4.0.0
admin_ip: 10.10.10.10
region: default
infra_portal:
home : { domain: i.pigsty }
registry : { domain: d.pigsty ,endpoint: "10.10.10.10:5000" ,certbot: d.pigsty }
registry-ui : { domain: dui.pigsty ,endpoint: "10.10.10.10:5080" }
repo_enabled: false
node_repo_modules: node,infra,pgsql
pg_version: 18
#----------------------------------------------#
# PASSWORD
#----------------------------------------------#
grafana_admin_password: pigsty
pg_admin_password: DBUser.DBA
# ... 更多密码配置
配置解读
registry 模板提供了 Docker Registry 镜像代理的一键部署方案。
Registry 是什么:
- Docker 官方的镜像仓库实现
- 可作为 Docker Hub 的拉取代理(Pull-through Cache)
- 也可作为私有镜像仓库使用
- 支持镜像缓存和本地存储
关键特性:
- 作为 Docker Hub 的代理缓存,加速镜像拉取
- 缓存镜像到本地存储
/data/registry - 提供 Web UI 界面查看缓存的镜像
- 支持自定义缓存过期时间
部署步骤:
curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/registry
vi pigsty.yml # 修改域名
./install.yml # 安装 Pigsty 基础设施
./docker.yml # 安装 Docker
./app.yml # 启动 Registry 容器
配置 Docker 客户端:
# 编辑 /etc/docker/daemon.json
{
"registry-mirrors": ["https://d.pigsty"],
"insecure-registries": ["d.pigsty"]
}
# 重启 Docker
sudo systemctl restart docker
访问方式:
# Registry API
https://d.pigsty/v2/_catalog
# Web UI
http://dui.pigsty:5080
# 拉取镜像(自动使用代理)
docker pull nginx:latest
适用场景:
- 加速 Docker 镜像拉取(尤其在中国大陆)
- 减少对外网络依赖
- 企业内部私有镜像仓库
- 离线环境镜像分发
注意事项:
- 需要足够的磁盘空间存储缓存镜像
- 默认缓存 7 天(
REGISTRY_PROXY_TTL: 168h) - 可配置 HTTPS 证书(通过 certbot)
- 也可作为推送目标存储私有镜像
7 - 其他模板
用于特定场景的配置模板,例如离线软件包构建、生产模拟测试等。
| 模板 | 说明 |
|---|---|
| oss | 开源版离线软件包构建环境 |
| pro | 专业版多版本构建环境 |
| simu | 36节点生产环境仿真配置 |
7.1 - oss
oss 配置模板是 Pigsty 开源版离线软件包的构建环境配置,用于在多个操作系统上批量构建离线安装包。
此配置仅供开发者和贡献者使用。
配置概览
- 配置名称:
oss(位于build/oss.yml) - 节点数量: 六节点(el9, el10, d12, d13, u22, u24)
- 配置说明:Pigsty 开源版离线软件包构建环境
- 适用系统:
el9,el10,d12,d13,u22,u24 - 适用架构:
x86_64
启用方式:
cp conf/build/oss.yml pigsty.yml
备注:这是一个固定 IP 地址的构建模板,仅供内部使用
配置内容
源文件地址:pigsty/conf/build/oss.yml
all:
vars:
version: v4.0.0
admin_ip: 10.10.10.24
region: china
etcd_clean: true
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,*.pigsty.cc"
# 构建规格
pg_version: 18
cache_pkg_dir: 'dist/${version}'
repo_modules: infra,node,pgsql
repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules ]
repo_extra_packages: [pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap, pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
children:
el9: { hosts: { 10.10.10.9: { pg_cluster: el9 ,pg_seq: 1 ,pg_role: primary }}}
el10: { hosts: { 10.10.10.10: { pg_cluster: el10 ,pg_seq: 1 ,pg_role: primary }}}
d12: { hosts: { 10.10.10.12: { pg_cluster: d12 ,pg_seq: 1 ,pg_role: primary }}}
d13: { hosts: { 10.10.10.13: { pg_cluster: d13 ,pg_seq: 1 ,pg_role: primary }}}
u22: { hosts: { 10.10.10.22: { pg_cluster: u22 ,pg_seq: 1 ,pg_role: primary }}}
u24: { hosts: { 10.10.10.24: { pg_cluster: u24 ,pg_seq: 1 ,pg_role: primary }}}
etcd: { hosts: { 10.10.10.24: { etcd_seq: 1 }}, vars: { etcd_cluster: etcd }}
infra:
hosts:
10.10.10.9: { infra_seq: 2, admin_ip: 10.10.10.9 ,ansible_host: el9 }
10.10.10.10: { infra_seq: 3, admin_ip: 10.10.10.10 ,ansible_host: el10 }
10.10.10.12: { infra_seq: 4, admin_ip: 10.10.10.12 ,ansible_host: d12 }
10.10.10.13: { infra_seq: 5, admin_ip: 10.10.10.13 ,ansible_host: d13 }
10.10.10.22: { infra_seq: 6, admin_ip: 10.10.10.22 ,ansible_host: u22 }
10.10.10.24: { infra_seq: 7, admin_ip: 10.10.10.24 ,ansible_host: u24 }
vars: { node_conf: oltp }
配置解读
oss 模板是 Pigsty 开源版离线软件包的构建配置。
构建内容:
- PostgreSQL 18 及所有分类扩展包
- 基础设施软件包(Prometheus、Grafana、Nginx 等)
- 节点软件包(监控代理、工具等)
- 额外模块(extra-modules)
支持的操作系统:
- EL9 (Rocky/Alma/RHEL 9)
- EL10 (Rocky 10 / RHEL 10)
- Debian 12 (Bookworm)
- Debian 13 (Trixie)
- Ubuntu 22.04 (Jammy)
- Ubuntu 24.04 (Noble)
构建流程:
# 1. 准备构建环境
cp conf/build/oss.yml pigsty.yml
# 2. 在各节点上下载软件包
./infra.yml -t repo_build
# 3. 打包离线安装包
make cache
适用场景:
- Pigsty 开发者构建新版本
- 贡献者测试新扩展
- 企业用户自定义离线包
注意事项:
- 构建需要访问上游软件源
- 可配置
proxy_env使用代理 - 输出目录为
dist/${version}/ - 需要在所有目标操作系统上分别构建
7.2 - pro
pro 配置模板是 Pigsty 专业版离线软件包的构建环境配置,包含 PostgreSQL 13-18 全版本及额外商业组件。
此配置仅供开发者和贡献者使用。
配置概览
- 配置名称:
pro(位于build/pro.yml) - 节点数量: 六节点(el9, el10, d12, d13, u22, u24)
- 配置说明:Pigsty 专业版离线软件包构建环境(多版本)
- 适用系统:
el9,el10,d12,d13,u22,u24 - 适用架构:
x86_64
启用方式:
cp conf/build/pro.yml pigsty.yml
备注:这是一个固定 IP 地址的构建模板,仅供内部使用
配置内容
源文件地址:pigsty/conf/build/pro.yml
all:
vars:
version: v4.0.0
admin_ip: 10.10.10.24
region: china
etcd_clean: true
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,*.pigsty.cc"
# 构建规格
pg_version: 18
cache_pkg_dir: 'dist/${version}/pro'
repo_modules: infra,node,pgsql
pg_extensions: []
repo_packages: [
node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules,
# PostgreSQL 18 全部扩展
pg18-full,pg18-time,pg18-gis,pg18-rag,pg18-fts,pg18-olap,pg18-feat,pg18-lang,pg18-type,pg18-util,pg18-func,pg18-admin,pg18-stat,pg18-sec,pg18-fdw,pg18-sim,pg18-etl,
# PostgreSQL 17 全部扩展
pg17-full,pg17-time,pg17-gis,pg17-rag,pg17-fts,pg17-olap,pg17-feat,pg17-lang,pg17-type,pg17-util,pg17-func,pg17-admin,pg17-stat,pg17-sec,pg17-fdw,pg17-sim,pg17-etl,
# PostgreSQL 16 全部扩展
pg16-full,pg16-time,pg16-gis,pg16-rag,pg16-fts,pg16-olap,pg16-feat,pg16-lang,pg16-type,pg16-util,pg16-func,pg16-admin,pg16-stat,pg16-sec,pg16-fdw,pg16-sim,pg16-etl,
# PostgreSQL 15 全部扩展
pg15-full,pg15-time,pg15-gis,pg15-rag,pg15-fts,pg15-olap,pg15-feat,pg15-lang,pg15-type,pg15-util,pg15-func,pg15-admin,pg15-stat,pg15-sec,pg15-fdw,pg15-sim,pg15-etl,
# PostgreSQL 14 全部扩展
pg14-full,pg14-time,pg14-gis,pg14-rag,pg14-fts,pg14-olap,pg14-feat,pg14-lang,pg14-type,pg14-util,pg14-func,pg14-admin,pg14-stat,pg14-sec,pg14-fdw,pg14-sim,pg14-etl,
# PostgreSQL 13 全部扩展
pg13-full,pg13-time,pg13-gis,pg13-rag,pg13-fts,pg13-olap,pg13-feat,pg13-lang,pg13-type,pg13-util,pg13-func,pg13-admin,pg13-stat,pg13-sec,pg13-fdw,pg13-sim,pg13-etl,
# 额外组件
infra-extra, kafka, java-runtime, sealos, tigerbeetle, polardb, ivorysql
]
children:
el9: { hosts: { 10.10.10.9: { pg_cluster: el9 ,pg_seq: 1 ,pg_role: primary }}}
el10: { hosts: { 10.10.10.10: { pg_cluster: el10 ,pg_seq: 1 ,pg_role: primary }}}
d12: { hosts: { 10.10.10.12: { pg_cluster: d12 ,pg_seq: 1 ,pg_role: primary }}}
d13: { hosts: { 10.10.10.13: { pg_cluster: d13 ,pg_seq: 1 ,pg_role: primary }}}
u22: { hosts: { 10.10.10.22: { pg_cluster: u22 ,pg_seq: 1 ,pg_role: primary }}}
u24: { hosts: { 10.10.10.24: { pg_cluster: u24 ,pg_seq: 1 ,pg_role: primary }}}
etcd: { hosts: { 10.10.10.24: { etcd_seq: 1 }}, vars: { etcd_cluster: etcd }}
infra:
hosts:
10.10.10.9: { infra_seq: 1, admin_ip: 10.10.10.9 ,ansible_host: el9 }
10.10.10.10: { infra_seq: 2, admin_ip: 10.10.10.10 ,ansible_host: el10 }
10.10.10.12: { infra_seq: 3, admin_ip: 10.10.10.12 ,ansible_host: d12 }
10.10.10.13: { infra_seq: 4, admin_ip: 10.10.10.13 ,ansible_host: d13 }
10.10.10.22: { infra_seq: 5, admin_ip: 10.10.10.22 ,ansible_host: u22 }
10.10.10.24: { infra_seq: 6, admin_ip: 10.10.10.24 ,ansible_host: u24 }
vars: { node_conf: oltp }
配置解读
pro 模板是 Pigsty 专业版离线软件包的构建配置,比开源版包含更多内容。
与 OSS 版的区别:
- 包含 PostgreSQL 13-18 全部六个大版本
- 包含额外商业/企业组件:Kafka、PolarDB、IvorySQL 等
- 包含 Java 运行时和 Sealos 等工具
- 输出目录为
dist/${version}/pro/
构建内容:
- PostgreSQL 13、14、15、16、17、18 全版本
- 每个版本的全部分类扩展包
- Kafka 消息队列
- PolarDB 和 IvorySQL 内核
- TigerBeetle 分布式数据库
- Sealos 容器平台
适用场景:
- 企业客户需要多版本支持
- 需要 Oracle/MySQL 兼容内核
- 需要 Kafka 消息队列集成
- 需要长期支持版本(LTS)
构建流程:
# 1. 准备构建环境
cp conf/build/pro.yml pigsty.yml
# 2. 在各节点上下载软件包
./infra.yml -t repo_build
# 3. 打包离线安装包
make cache-pro
注意事项:
- 专业版离线包体积较大(约 5-8 GB)
- 构建时间较长(需要下载所有版本)
- 部分组件可能需要额外授权
- 输出目录为
dist/${version}/pro/
7.3 - simu
配置概览
- 配置名称:
simu - 节点数量: 36 节点,
pigsty/vagrant/spec/simu.rb - 配置说明:43 节点的生产环境仿真配置,需要强大的宿主机方可运行。
- 适用系统:
el8,el9,d12,u22,u24 - 适用架构:
x86_64
cp -f conf/simu.yml pigsty.yml
配置内容
源文件地址:pigsty/conf/prod.yml
all:
children:
#==========================================================#
# infra: 2 nodes
#==========================================================#
# ./infra.yml -l infra
# ./docker.yml -l infra (optional)
infra:
hosts:
10.10.10.10: {}
10.10.10.11: {}
vars:
docker_enabled: true
node_conf: oltp # use oltp template for infra nodes
pg_conf: oltp.yml # use oltp template for infra pgsql
pg_exporters: # bin/pgmon-add pg-meta2/pg-test2/pg-src2/pg-dst2
20001: {pg_cluster: pg-meta2 ,pg_seq: 1 ,pg_host: 10.10.10.10, pg_databases: [{ name: meta }]}
20002: {pg_cluster: pg-meta2 ,pg_seq: 2 ,pg_host: 10.10.10.11, pg_databases: [{ name: meta }]}
20003: {pg_cluster: pg-test2 ,pg_seq: 1 ,pg_host: 10.10.10.41, pg_databases: [{ name: test }]}
20004: {pg_cluster: pg-test2 ,pg_seq: 2 ,pg_host: 10.10.10.42, pg_databases: [{ name: test }]}
20005: {pg_cluster: pg-test2 ,pg_seq: 3 ,pg_host: 10.10.10.43, pg_databases: [{ name: test }]}
20006: {pg_cluster: pg-test2 ,pg_seq: 4 ,pg_host: 10.10.10.44, pg_databases: [{ name: test }]}
20007: {pg_cluster: pg-src2 ,pg_seq: 1 ,pg_host: 10.10.10.45, pg_databases: [{ name: src }]}
20008: {pg_cluster: pg-src2 ,pg_seq: 2 ,pg_host: 10.10.10.46, pg_databases: [{ name: src }]}
20009: {pg_cluster: pg-src2 ,pg_seq: 3 ,pg_host: 10.10.10.47, pg_databases: [{ name: src }]}
20010: {pg_cluster: pg-dst2 ,pg_seq: 3 ,pg_host: 10.10.10.48, pg_databases: [{ name: dst }]}
20011: {pg_cluster: pg-dst2 ,pg_seq: 4 ,pg_host: 10.10.10.49, pg_databases: [{ name: dst }]}
#==========================================================#
# nodes: 36 nodes
#==========================================================#
# ./node.yml
nodes:
hosts:
10.10.10.10 : { nodename: meta1 ,node_cluster: meta ,pg_cluster: pg_meta ,pg_seq: 1 ,pg_role: primary, infra_seq: 1 }
10.10.10.11 : { nodename: meta2 ,node_cluster: meta ,pg_cluster: pg_meta ,pg_seq: 2 ,pg_role: replica, infra_seq: 2 }
10.10.10.12 : { nodename: pg12 ,node_cluster: pg12 ,pg_cluster: pg-v12 ,pg_seq: 1 ,pg_role: primary }
10.10.10.13 : { nodename: pg13 ,node_cluster: pg13 ,pg_cluster: pg-v13 ,pg_seq: 1 ,pg_role: primary }
10.10.10.14 : { nodename: pg14 ,node_cluster: pg14 ,pg_cluster: pg-v14 ,pg_seq: 1 ,pg_role: primary }
10.10.10.15 : { nodename: pg15 ,node_cluster: pg15 ,pg_cluster: pg-v15 ,pg_seq: 1 ,pg_role: primary }
10.10.10.16 : { nodename: pg16 ,node_cluster: pg16 ,pg_cluster: pg-v16 ,pg_seq: 1 ,pg_role: primary }
10.10.10.17 : { nodename: pg17 ,node_cluster: pg17 ,pg_cluster: pg-v17 ,pg_seq: 1 ,pg_role: primary }
10.10.10.18 : { nodename: proxy1 ,node_cluster: proxy ,vip_address: 10.10.10.20 ,vip_vrid: 20 ,vip_interface: eth1 ,vip_role: master }
10.10.10.19 : { nodename: proxy2 ,node_cluster: proxy ,vip_address: 10.10.10.20 ,vip_vrid: 20 ,vip_interface: eth1 ,vip_role: backup }
10.10.10.21 : { nodename: minio1 ,node_cluster: minio ,minio_cluster: minio ,minio_seq: 1 ,etcd_cluster: etcd ,etcd_seq: 1}
10.10.10.22 : { nodename: minio2 ,node_cluster: minio ,minio_cluster: minio ,minio_seq: 2 ,etcd_cluster: etcd ,etcd_seq: 2}
10.10.10.23 : { nodename: minio3 ,node_cluster: minio ,minio_cluster: minio ,minio_seq: 3 ,etcd_cluster: etcd ,etcd_seq: 3}
10.10.10.24 : { nodename: minio4 ,node_cluster: minio ,minio_cluster: minio ,minio_seq: 4 ,etcd_cluster: etcd ,etcd_seq: 4}
10.10.10.25 : { nodename: minio5 ,node_cluster: minio ,minio_cluster: minio ,minio_seq: 5 ,etcd_cluster: etcd ,etcd_seq: 5}
10.10.10.40 : { nodename: node40 ,node_id_from_pg: true }
10.10.10.41 : { nodename: node41 ,node_id_from_pg: true }
10.10.10.42 : { nodename: node42 ,node_id_from_pg: true }
10.10.10.43 : { nodename: node43 ,node_id_from_pg: true }
10.10.10.44 : { nodename: node44 ,node_id_from_pg: true }
10.10.10.45 : { nodename: node45 ,node_id_from_pg: true }
10.10.10.46 : { nodename: node46 ,node_id_from_pg: true }
10.10.10.47 : { nodename: node47 ,node_id_from_pg: true }
10.10.10.48 : { nodename: node48 ,node_id_from_pg: true }
10.10.10.49 : { nodename: node49 ,node_id_from_pg: true }
10.10.10.50 : { nodename: node50 ,node_id_from_pg: true }
10.10.10.51 : { nodename: node51 ,node_id_from_pg: true }
10.10.10.52 : { nodename: node52 ,node_id_from_pg: true }
10.10.10.53 : { nodename: node53 ,node_id_from_pg: true }
10.10.10.54 : { nodename: node54 ,node_id_from_pg: true }
10.10.10.55 : { nodename: node55 ,node_id_from_pg: true }
10.10.10.56 : { nodename: node56 ,node_id_from_pg: true }
10.10.10.57 : { nodename: node57 ,node_id_from_pg: true }
10.10.10.58 : { nodename: node58 ,node_id_from_pg: true }
10.10.10.59 : { nodename: node59 ,node_id_from_pg: true }
10.10.10.88 : { nodename: test }
#==========================================================#
# etcd: 5 nodes used as dedicated minio cluster
#==========================================================#
# ./etcd.yml -l etcd;
etcd:
hosts:
10.10.10.21: {}
10.10.10.22: {}
10.10.10.23: {}
10.10.10.24: {}
10.10.10.25: {}
vars: {}
#==========================================================#
# minio: 3 nodes used as dedicated minio cluster
#==========================================================#
# ./minio.yml -l minio;
minio:
hosts:
10.10.10.21: {}
10.10.10.22: {}
10.10.10.23: {}
10.10.10.24: {}
10.10.10.25: {}
vars:
minio_data: '/data{1...4}' # 5 node x 4 disk
#==========================================================#
# proxy: 2 nodes used as dedicated haproxy server
#==========================================================#
# ./node.yml -l proxy
proxy:
hosts:
10.10.10.18: {}
10.10.10.19: {}
vars:
vip_enabled: true
haproxy_services: # expose minio service : sss.pigsty:9000
- name: minio # [REQUIRED] service name, unique
port: 9000 # [REQUIRED] service port, unique
balance: leastconn # Use leastconn algorithm and minio health check
options: [ "option httpchk", "option http-keep-alive", "http-check send meth OPTIONS uri /minio/health/live", "http-check expect status 200" ]
servers: # reload service with ./node.yml -t haproxy_config,haproxy_reload
- { name: minio-1 ,ip: 10.10.10.21 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-2 ,ip: 10.10.10.22 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-3 ,ip: 10.10.10.23 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-4 ,ip: 10.10.10.24 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
- { name: minio-5 ,ip: 10.10.10.25 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
#==========================================================#
# pg-meta: reuse infra node as meta cmdb
#==========================================================#
# ./pgsql.yml -l pg-meta
pg-meta:
hosts:
10.10.10.10: { pg_seq: 1 , pg_role: primary }
10.10.10.11: { pg_seq: 2 , pg_role: replica }
vars:
pg_cluster: pg-meta
pg_vip_enabled: true
pg_vip_address: 10.10.10.2/24
pg_vip_interface: eth1
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 for meta database }
- {name: dbuser_grafana ,password: DBUser.Grafana ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for grafana database }
- {name: dbuser_bytebase ,password: DBUser.Bytebase ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for bytebase database }
- {name: dbuser_kong ,password: DBUser.Kong ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for kong api gateway }
- {name: dbuser_gitea ,password: DBUser.Gitea ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for gitea service }
- {name: dbuser_wiki ,password: DBUser.Wiki ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for wiki.js service }
- {name: dbuser_noco ,password: DBUser.Noco ,pgbouncer: true ,roles: [dbrole_admin] ,comment: admin user for nocodb service }
pg_databases:
- { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: vector}]}
- { name: grafana ,owner: dbuser_grafana ,revokeconn: true ,comment: grafana primary database }
- { name: bytebase ,owner: dbuser_bytebase ,revokeconn: true ,comment: bytebase primary database }
- { name: kong ,owner: dbuser_kong ,revokeconn: true ,comment: kong the api gateway database }
- { name: gitea ,owner: dbuser_gitea ,revokeconn: true ,comment: gitea meta database }
- { name: wiki ,owner: dbuser_wiki ,revokeconn: true ,comment: wiki meta database }
- { name: noco ,owner: dbuser_noco ,revokeconn: true ,comment: nocodb database }
pg_hba_rules:
- { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
pg_libs: 'pg_stat_statements, auto_explain' # add timescaledb to shared_preload_libraries
node_crontab: # make a full backup on monday 1am, and an incremental backup during weekdays
- '00 01 * * 1 postgres /pg/bin/pg-backup full'
- '00 01 * * 2,3,4,5,6,7 postgres /pg/bin/pg-backup'
#==========================================================#
# pg-v13 - v17
#==========================================================#
# ./pgsql.yml -l pg-v*
pg-v12:
hosts: { 10.10.10.12: {}}
vars:
pg_version: 13
pg_service_provider: proxy # use load balancer on group `proxy` with port 10012
pg_default_services: [{ name: primary ,port: 10012 ,dest: postgres ,check: /primary ,selector: "[]" }]
pg-v13:
hosts: { 10.10.10.13: {}}
vars:
pg_version: 13
pg_service_provider: proxy # use load balancer on group `proxy` with port 10013
pg_default_services: [{ name: primary ,port: 10013 ,dest: postgres ,check: /primary ,selector: "[]" }]
pg-v14:
hosts: { 10.10.10.14: {}}
vars:
pg_version: 14
pg_service_provider: proxy # use load balancer on group `proxy` with port 10014
pg_default_services: [{ name: primary ,port: 10014 ,dest: postgres ,check: /primary ,selector: "[]" }]
pg-v15:
hosts: { 10.10.10.15: {}}
vars:
pg_version: 15
pg_service_provider: proxy # use load balancer on group `proxy` with port 10015
pg_default_services: [{ name: primary ,port: 10015 ,dest: postgres ,check: /primary ,selector: "[]" }]
pg-v16:
hosts: { 10.10.10.16: {}}
vars:
pg_version: 16
pg_service_provider: proxy # use load balancer on group `proxy` with port 10016
pg_default_services: [{ name: primary ,port: 10016 ,dest: postgres ,check: /primary ,selector: "[]" }]
pg-v17:
hosts: { 10.10.10.17: {}}
vars:
pg_version: 17
pg_service_provider: proxy # use load balancer on group `proxy` with port 10017
pg_default_services: [{ name: primary ,port: 10017 ,dest: postgres ,check: /primary ,selector: "[]" }]
#==========================================================#
# pg-pitr: single node
#==========================================================#
# ./pgsql.yml -l pg-pitr
pg-pitr:
hosts:
10.10.10.40: { pg_seq: 1 ,pg_role: primary }
vars:
pg_cluster: pg-pitr
pg_databases: [{ name: test }]
#==========================================================#
# pg-test: dedicate 4 node testing cluster
#==========================================================#
# ./pgsql.yml -l pg-test
pg-test:
hosts:
10.10.10.41: { pg_seq: 1 ,pg_role: primary }
10.10.10.42: { pg_seq: 2 ,pg_role: replica }
10.10.10.43: { pg_seq: 3 ,pg_role: replica }
10.10.10.44: { pg_seq: 4 ,pg_role: replica }
vars:
pg_cluster: pg-test
pg_vip_enabled: true
pg_vip_address: 10.10.10.3/24
pg_vip_interface: eth1
pg_users: [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
pg_databases: [{ name: test }]
#==========================================================#
# pg-src: dedicate 3 node testing cluster
#==========================================================#
# ./pgsql.yml -l pg-src
pg-src:
hosts:
10.10.10.45: { pg_seq: 1 ,pg_role: primary }
10.10.10.46: { pg_seq: 2 ,pg_role: replica }
10.10.10.47: { pg_seq: 3 ,pg_role: replica }
vars:
pg_cluster: pg-src
#pg_version: 14
pg_vip_enabled: true
pg_vip_address: 10.10.10.4/24
pg_vip_interface: eth1
pg_users: [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
pg_databases: [{ name: src }]
#==========================================================#
# pg-dst: dedicate 2 node testing cluster
#==========================================================#
# ./pgsql.yml -l pg-dst
pg-dst:
hosts:
10.10.10.48: { pg_seq: 1 ,pg_role: primary } # 8C 8G
10.10.10.49: { pg_seq: 2 ,pg_role: replica } # 1C 2G
vars:
pg_cluster: pg-dst
pg_vip_enabled: true
pg_vip_address: 10.10.10.5/24
pg_vip_interface: eth1
node_hugepage_ratio: 0.3
pg_users: [ { name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] } ]
pg_databases: [ { name: dst } ]
#==========================================================#
# pg-citus: 10 node citus cluster (5 x primary-replica pair)
#==========================================================#
pg-citus: # citus group
hosts:
10.10.10.50: { pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.60/24 ,pg_seq: 0, pg_role: primary }
10.10.10.51: { pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.60/24 ,pg_seq: 1, pg_role: replica }
10.10.10.52: { pg_group: 1, pg_cluster: pg-citus1 ,pg_vip_address: 10.10.10.61/24 ,pg_seq: 0, pg_role: primary }
10.10.10.53: { pg_group: 1, pg_cluster: pg-citus1 ,pg_vip_address: 10.10.10.61/24 ,pg_seq: 1, pg_role: replica }
10.10.10.54: { pg_group: 2, pg_cluster: pg-citus2 ,pg_vip_address: 10.10.10.62/24 ,pg_seq: 0, pg_role: primary }
10.10.10.55: { pg_group: 2, pg_cluster: pg-citus2 ,pg_vip_address: 10.10.10.62/24 ,pg_seq: 1, pg_role: replica }
10.10.10.56: { pg_group: 3, pg_cluster: pg-citus3 ,pg_vip_address: 10.10.10.63/24 ,pg_seq: 0, pg_role: primary }
10.10.10.57: { pg_group: 3, pg_cluster: pg-citus3 ,pg_vip_address: 10.10.10.63/24 ,pg_seq: 1, pg_role: replica }
10.10.10.58: { pg_group: 4, pg_cluster: pg-citus4 ,pg_vip_address: 10.10.10.64/24 ,pg_seq: 0, pg_role: primary }
10.10.10.59: { pg_group: 4, pg_cluster: pg-citus4 ,pg_vip_address: 10.10.10.64/24 ,pg_seq: 1, pg_role: replica }
vars:
pg_mode: citus # pgsql cluster mode: citus
pg_version: 16 # citus does not have pg16 available
pg_shard: pg-citus # citus shard name: pg-citus
pg_primary_db: test # primary database used by citus
pg_dbsu_password: DBUser.Postgres # all dbsu password access for citus cluster
pg_vip_enabled: true
pg_vip_interface: eth1
pg_extensions: [ 'citus postgis pgvector' ]
pg_libs: 'citus, pg_stat_statements, auto_explain' # citus will be added by patroni automatically
pg_users: [ { name: test ,password: test ,pgbouncer: true ,roles: [ dbrole_admin ] } ]
pg_databases: [ { name: test ,owner: test ,extensions: [ { name: citus }, { name: vector } ] } ]
pg_hba_rules:
- { user: 'all' ,db: all ,addr: 10.10.10.0/24 ,auth: trust ,title: 'trust citus cluster members' }
- { user: 'all' ,db: all ,addr: 127.0.0.1/32 ,auth: ssl ,title: 'all user ssl access from localhost' }
- { user: 'all' ,db: all ,addr: intra ,auth: ssl ,title: 'all user ssl access from intranet' }
#==========================================================#
# redis-meta: reuse the 5 etcd nodes as redis sentinel
#==========================================================#
# ./redis.yml -l redis-meta
redis-meta:
hosts:
10.10.10.21: { redis_node: 1 , redis_instances: { 26379: {} } }
10.10.10.22: { redis_node: 2 , redis_instances: { 26379: {} } }
10.10.10.23: { redis_node: 3 , redis_instances: { 26379: {} } }
10.10.10.24: { redis_node: 4 , redis_instances: { 26379: {} } }
10.10.10.25: { redis_node: 5 , redis_instances: { 26379: {} } }
vars:
redis_cluster: redis-meta
redis_password: 'redis.meta'
redis_mode: sentinel
redis_max_memory: 256MB
redis_sentinel_monitor: # primary list for redis sentinel, use cls as name, primary ip:port
- { name: redis-src, host: 10.10.10.45, port: 6379 ,password: redis.src, quorum: 1 }
- { name: redis-dst, host: 10.10.10.48, port: 6379 ,password: redis.dst, quorum: 1 }
#==========================================================#
# redis-test: redis native cluster in 4 nodes, 12 instances
#==========================================================#
# ./node.yml -l redis-test; ./redis.yml -l redis-test
redis-test:
hosts:
10.10.10.41: { redis_node: 1 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
10.10.10.42: { redis_node: 2 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
10.10.10.43: { redis_node: 3 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
10.10.10.44: { redis_node: 4 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
vars:
redis_cluster: redis-test
redis_password: 'redis.test'
redis_mode: cluster
redis_max_memory: 64MB
#==========================================================#
# redis-src: reuse pg-src 3 nodes for redis
#==========================================================#
# ./redis.yml -l redis-src
redis-src:
hosts:
10.10.10.45: { redis_node: 1 , redis_instances: {6379: { } }}
10.10.10.46: { redis_node: 2 , redis_instances: {6379: { replica_of: '10.10.10.45 6379' }, 6380: { replica_of: '10.10.10.46 6379' } }}
10.10.10.47: { redis_node: 3 , redis_instances: {6379: { replica_of: '10.10.10.45 6379' }, 6380: { replica_of: '10.10.10.47 6379' } }}
vars:
redis_cluster: redis-src
redis_password: 'redis.src'
redis_max_memory: 64MB
#==========================================================#
# redis-dst: reuse pg-dst 2 nodes for redis
#==========================================================#
# ./redis.yml -l redis-dst
redis-dst:
hosts:
10.10.10.48: { redis_node: 1 , redis_instances: {6379: { } }}
10.10.10.49: { redis_node: 2 , redis_instances: {6379: { replica_of: '10.10.10.48 6379' } }}
vars:
redis_cluster: redis-dst
redis_password: 'redis.dst'
redis_max_memory: 64MB
#==========================================================#
# ferret: reuse pg-src as mongo (ferretdb)
#==========================================================#
# ./mongo.yml -l ferret
ferret:
hosts:
10.10.10.45: { mongo_seq: 1 }
10.10.10.46: { mongo_seq: 2 }
10.10.10.47: { mongo_seq: 3 }
vars:
mongo_cluster: ferret
mongo_pgurl: 'postgres://test:test@10.10.10.45:5432/src'
#mongo_pgurl: 'postgres://test:test@10.10.10.3:5436/test'
#==========================================================#
# test: running cli tools and test miscellaneous stuff
#==========================================================#
test:
hosts: { 10.10.10.88: { nodename: test } }
vars:
node_cluster: test
node_packages: [ 'etcd,logcli,mcli,redis' ]
#============================================================#
# Global Variables
#============================================================#
vars:
#==========================================================#
# INFRA
#==========================================================#
version: v3.2.2 # pigsty version string
admin_ip: 10.10.10.10 # admin node ip address
region: default # upstream mirror region: default|china|europe
infra_portal: # domain names and upstream servers
home : { domain: h.pigsty }
grafana : { domain: g.pigsty ,endpoint: "10.10.10.10:3000" , websocket: true }
prometheus : { domain: p.pigsty ,endpoint: "10.10.10.10:9090" }
alertmanager : { domain: a.pigsty ,endpoint: "10.10.10.10:9093" }
blackbox : { endpoint: "10.10.10.10:9115" }
loki : { endpoint: "10.10.10.10:3100" }
minio : { domain: m.pigsty ,endpoint: "10.10.10.21:9001" ,scheme: https ,websocket: true }
postgrest : { domain: api.pigsty ,endpoint: "127.0.0.1:8884" }
pgadmin : { domain: adm.pigsty ,endpoint: "127.0.0.1:8885" }
pgweb : { domain: cli.pigsty ,endpoint: "127.0.0.1:8886" }
bytebase : { domain: ddl.pigsty ,endpoint: "127.0.0.1:8887" }
jupyter : { domain: lab.pigsty ,endpoint: "127.0.0.1:8888" , websocket: true }
supa : { domain: supa.pigsty ,endpoint: "10.10.10.10:8000", websocket: true }
nginx_navbar: []
dns_records: # dynamic dns records resolved by dnsmasq
- 10.10.10.1 h.pigsty a.pigsty p.pigsty g.pigsty
#==========================================================#
# NODE
#==========================================================#
node_id_from_pg: false # use nodename rather than pg identity as hostname
node_conf: tiny # use small node template
node_timezone: Asia/Hong_Kong # use Asia/Hong_Kong Timezone
node_dns_servers: # DNS servers in /etc/resolv.conf
- 10.10.10.10
- 10.10.10.11
node_etc_hosts:
- 10.10.10.10 h.pigsty a.pigsty p.pigsty g.pigsty
- 10.10.10.20 sss.pigsty # point minio serviec domain to the L2 VIP of proxy cluster
node_ntp_servers: # NTP servers in /etc/chrony.conf
- pool cn.pool.ntp.org iburst
- pool 10.10.10.10 iburst
node_admin_ssh_exchange: false # exchange admin ssh key among node cluster
#==========================================================#
# PGSQL
#==========================================================#
pg_conf: tiny.yml
pgbackrest_method: minio # USE THE HA MINIO THROUGH A LOAD BALANCER
pg_dbsu_ssh_exchange: false # do not exchange dbsu ssh key among pgsql cluster
pgbackrest_repo: # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
local: # default pgbackrest repo with local posix fs
path: /pg/backup # local backup directory, `/pg/backup` by default
retention_full_type: count # retention full backups by count
retention_full: 2 # keep 2, at most 3 full backup when using local fs repo
minio:
type: s3
s3_endpoint: sss.pigsty # s3_endpoint could be any load balancer: 10.10.10.1{0,1,2}, or domain names point to any of the 3 nodes
s3_region: us-east-1 # you could use external domain name: sss.pigsty , which resolve to any members (`minio_domain`)
s3_bucket: pgsql # instance & nodename can be used : minio-1.pigsty minio-1.pigsty minio-1.pigsty minio-1 minio-2 minio-3
s3_key: pgbackrest # Better using a new password for MinIO pgbackrest user
s3_key_secret: S3User.Backup
s3_uri_style: path
path: /pgbackrest
storage_port: 9000 # Use the load balancer port 9000
storage_ca_file: /etc/pki/ca.crt
bundle: y
cipher_type: aes-256-cbc # Better using a new cipher password for your production environment
cipher_pass: pgBackRest.${pg_cluster}
retention_full_type: time
retention_full: 14