这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

高可用模板

多节点高可用配置模板,适用于生产环境部署

多节点高可用配置模板,适用于生产环境部署。

模板节点数说明
dual2双节点有限高可用部署
trio3三节点标准高可用部署
full4四节点完整功能演示环境
safe4安全加固的高可用配置模板

1 - dual

双节点配置模板,有限高可用部署,允许宕机特定一台服务器。

dual 模板使用双节点部署,实现一主一备的"半高可用"架构。如果您只有两台服务器,这是一个务实的选择。


配置概览

  • 配置名称: dual(位于 ha/dual.yml
  • 节点数量: 双节点
  • 配置说明:两节点有限高可用部署,允许特定一台服务器宕机
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:trioslim

启用方式:

./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 需要网络环境支持(同一广播域)

2 - trio

三节点标准高可用配置模板,允许任意一台服务器宕机。

三节点是实现真正高可用的最小规格。trio 模板使用三节点标准 HA 架构,INFRA、ETCD、PGSQL 三个核心模块均采用三节点部署,允许任意一台服务器宕机。


配置概览

  • 配置名称: trio(位于 ha/trio.yml
  • 节点数量: 三节点
  • 配置说明:三节点标准高可用架构,允许任意一台服务器宕机
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:dualfullsafe

启用方式:

./configure -c ha/trio [-i <primary_ip>]

配置生成后,需要将占位 IP 10.10.10.1110.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 随主库漂移,应用无需修改连接配置

适用场景

  • 生产环境最小高可用部署
  • 需要自动故障转移的关键业务
  • 作为更大规模部署的基础架构

扩展建议

  • 需要更强数据安全性,参考 safe 模板
  • 需要更多演示功能,参考 full 模板
  • 生产环境建议启用 pgbackrest_method: minio 远程备份

3 - full

四节点完整功能演示环境,带有两套 PostgreSQL 集群、MinIO、Redis 等组件示例

full 配置模板是 Pigsty 推荐的沙箱演示环境,使用四个节点部署两套 PostgreSQL 集群,用于测试和演示 Pigsty 各方面的能力。

Pigsty 大部分教程和示例都基于此模板的沙箱环境。


配置概览

  • 配置名称: full(位于 ha/full.yml
  • 节点数量: 四节点
  • 配置说明:四节点完整功能演示环境,带有两套 PostgreSQL 集群、MinIO、Redis 等组件示例
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:triosafedemo

启用方式:

./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节点1DCS 服务
MinIO节点1S3 兼容存储
pg-meta节点1单节点 PostgreSQL
pg-test节点2-4三节点高可用 PostgreSQL
redis-ms节点1Redis 主从模式
redis-meta节点2Redis 哨兵模式
redis-test节点3-4Redis 原生集群模式

适用场景

  • Pigsty 功能演示与学习
  • 开发测试环境
  • 评估高可用架构
  • Redis 不同模式对比测试

与 trio 的区别

  • 增加了第二套 PostgreSQL 集群(pg-test)
  • 增加了三种模式的 Redis 集群示例
  • 基础设施使用单节点(而非三节点)

注意事项

  • 此模板主要用于演示和测试,生产环境请参考 triosafe
  • 默认启用 MinIO 备份,如不需要可注释相关配置

4 - safe

安全加固的高可用配置模板,采用高标准的安全最佳实践

safe 配置模板基于 trio 模板修改,是一个安全加固的专用配置模板,采用高标准的安全最佳实践。


配置概览

  • 配置名称: safe(位于 ha/safe.yml
  • 节点数量: 四节点
  • 配置说明:安全加固的高可用配置模板,采用高标准的安全最佳实践
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64(部分安全扩展在 ARM64 不可用)
  • 相关配置:triofull

启用方式:

./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 架构不可用,请酌情启用
  • 所有默认密码必须修改为强密码
  • 建议配合定期安全审计使用