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 自动运维。
一台 8C16G 云服务器跑全部组件。
| 资源 | 最低 | 推荐 | 说明 |
|---|---|---|---|
| CPU | 4C | 8C | PG 并行查询 |
| 内存 | 8G | 16G | shared_buffers 25% |
| 磁盘 | 100G SSD | 500G SSD | 数据增长预留 |
| 网络 | 10Mbps | 100Mbps | 供应商 API |
3 节点:Primary(Node1 8C16G) + Replica(Node2 8C16G) + etcd/PgBouncer/HAProxy(Node3 4C8G),Patroni 自动故障切换。
操作系统:Debian 12 / Ubuntu 22.04 / Rocky 9
sudo setenforce 0
sudo systemctl disable --now firewalld
sudo apt install -y curl wget sshpass python3
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
pigsty.yml 添加多节点 roles 定义,指定 patroni_role: replica 和 replication_access: true,然后执行 node.yml + pgsql.yml + infra.yml。
内置 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 |
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
| 数据量 | 方案 | 停机 |
|---|---|---|
| < 10G | pg_dump/pg_restore | 5-30min |
| 10-100G | pg_dump 并行 | 30min-2h |
| 100G+ | pgBackRest/逻辑复制 | 零停机 |
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]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 50
reserve_pool_size = 10
query_timeout = 30
shared_preload_libraries = 'pgaudit,pg_stat_statements'
pgaudit.log = 'write,ddl'
角色分离:app_readonly(SELECT)、app_readwrite(CRUD)、app_admin(ALL)。
| 插件 | 用途 |
|---|---|
| pg_trgm | 模糊搜索(酒店名称匹配) |
| pg_cron | 定时任务(数据归档、统计) |
| pg_stat_statements | 查询性能分析 |
| pg_partman | 自动分区(按月/年) |
| btree_gin | GIN 索引支持复合类型 |
| postgis | 地理位置搜索(酒店周边) |
| pgvector | 向量搜索(未来 AI 功能) |
| citus | 分布式扩展(分库分表) |
| pg_repack | 在线重建索引(无锁) |
| pg_jwt | JWT 认证(API 鉴权) |