← 返回文档中心

Pigsty PostgreSQL 企业级部署方案

1. 概述

Pigsty 是开源免费的 PostgreSQL 发行版,10 分钟部署企业级数据库,成本仅为云 RDS 的 1/10。

官网:https://pigsty.cc / 版本:v3.4

对比项 云 RDS Pigsty 自建
月成本 8C16G 3000-5000 元 300-500 元
数据主权 在云端 完全自主
PG 扩展 受限 400+ 开箱即用
高可用 按规格付费 免费内置 Patroni
监控 有限 451 指标 + Grafana
备份 按量付费 pgBackRest 免费

适用场景:B2B2B 平台主数据库、预算有限需要高可用、需要丰富 PG 扩展、AI Agent 自动运维。

2. 架构设计

2.1 单节点 MVP

一台 8C16G 云服务器跑全部组件。

资源 最低 推荐 说明
CPU 4C 8C PG 并行查询
内存 8G 16G shared_buffers 25%
磁盘 100G SSD 500G SSD 数据增长预留
网络 10Mbps 100Mbps 供应商 API

2.2 高可用生产

3 节点:Primary(Node1 8C16G) + Replica(Node2 8C16G) + etcd/PgBouncer/HAProxy(Node3 4C8G),Patroni 自动故障切换。

3. 安装

3.1 环境准备

操作系统:Debian 12 / Ubuntu 22.04 / Rocky 9

sudo setenforce 0
sudo systemctl disable --now firewalld
sudo apt install -y curl wget sshpass python3

3.2 单节点安装

curl https://pigsty.cc/install | bash

cat > ~/pigsty.yml << 'EOF'
node_dedicated: true
node_tune: tiny
pg_cluster:
  - name: pg-b2b2b
    scope: b2b2b
    roles:
      - name: pg
        ip: 127.0.0.1
pg_default_conf:
  - max_connections: 200
  - shared_buffers: 4GB
  - effective_cache_size: 12GB
  - work_mem: 64MB
  - maintenance_work_mem: 512MB
  - wal_level: replica
  - random_page_cost: 1.1
  - effective_io_concurrency: 200
EOF

./node.yml && ./pgsql.yml && ./infra.yml

安装后:PG localhost:5432 / PgBouncer localhost:6432 / Grafana http://IP:3000

3.3 高可用安装

pigsty.yml 添加多节点 roles 定义,指定 patroni_role: replica 和 replication_access: true,然后执行 node.yml + pgsql.yml + infra.yml。

4. 监控

内置 Prometheus + Grafana,看板:PG Overview / PG Stat Activity / PG Table / PG Log / PG Replication。

关键指标:

指标 告警阈值
pg_up != 1 -> P0
pg_replication_lag_seconds > 5s P1, > 30s P0
pg_connections > 80% max -> P2
pg_stat_activity_max_tx_duration > 30s P2, > 300s P1
pg_database_size_bytes > 80% disk -> P2
pg_locks_waiting > 100 P2, > 500 P1
pg_backrest_last_backup > 26h -> P2

5. 备份与恢复

pgBackRest:每周日全量(保留4周) + 每日差异(保留7天) + WAL 持续归档(保留7天),AES-256 加密。

pgbackrest --stanza=b2b2b info
pgbackrest --stanza=b2b2b --type=full restore
pgbackrest --stanza=b2b2b --type=time --target="2026-04-15 10:30:00" restore

6. 迁移

数据量 方案 停机
< 10G pg_dump/pg_restore 5-30min
10-100G pg_dump 并行 30min-2h
100G+ pgBackRest/逻辑复制 零停机

7. 性能调优

PG 参数 8C16G

shared_buffers = '4GB'
effective_cache_size = '12GB'
work_mem = '64MB'
maintenance_work_mem = '512MB'
wal_level = 'replica'
max_wal_senders = 10
max_connections = 200
max_worker_processes = 8
max_parallel_workers_per_gather = 4
random_page_cost = 1.1
effective_io_concurrency = 200
autovacuum_max_workers = 4
autovacuum_vacuum_scale_factor = 0.02
log_min_duration_statement = '500ms'
log_lock_waits = on

PgBouncer

[pgbouncer]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 50
reserve_pool_size = 10
query_timeout = 30

8. 安全

shared_preload_libraries = 'pgaudit,pg_stat_statements'
pgaudit.log = 'write,ddl'

角色分离:app_readonly(SELECT)、app_readwrite(CRUD)、app_admin(ALL)。

9. 扩展插件

插件 用途
pg_trgm 模糊搜索(酒店名称匹配)
pg_cron 定时任务(数据归档、统计)
pg_stat_statements 查询性能分析
pg_partman 自动分区(按月/年)
btree_gin GIN 索引支持复合类型
postgis 地理位置搜索(酒店周边)
pgvector 向量搜索(未来 AI 功能)
citus 分布式扩展(分库分表)
pg_repack 在线重建索引(无锁)
pg_jwt JWT 认证(API 鉴权)