这些是参考配置,不是 PostgreSQL 固有端口;必须以当前 inventory 与生成配置为准。
HAProxy 通常用 Patroni role endpoint 判后端资格,PgBouncer 再把大量 client
connection 映射为受控 server connection。
正确隔离:
OLTP write -> primary pooled service
read-with-staleness-contract -> replica pooled service
long report/ETL -> offline service + separate budget
DDL/admin/session semantics -> controlled direct service
不正确隔离:
all SELECT -> replica, regardless of read-your-write
all long queries -> offline, regardless of shared storage/CPU
database slow -> send everything to every replica
primary service full -> bypass PgBouncer through direct service
direct service 是为需要 session/管理语义的受控客户端准备的路径,不是池满时的逃生
后门。若应用能无治理地从 5433 切到 5436,连接预算就失去意义。
inventory revision and rendered config hash
service frontend/backend mapping
HAProxy health predicate and backend state
PgBouncer pool mode and per-database/user pool settings
client/server/waiting counts
PostgreSQL max/reserved/current connections
application instance and local-pool counts
promote the change into config-as-code
or explicitly revert runtime state
否则下次部署会“神秘地”覆盖救火配置。
减压顺序
1. application: reject/queue low priority and cap retry
2. scheduler: pause batch producers
3. pool: preserve OLTP/admin budget, constrain noisy class
4. proxy: drain ineligible or overloaded path when evidence supports it
5. database: exact cancel, timeout, role/session controls
不要同时把 proxy backend 摘除和把应用全部转 direct;前者减少一条路径,后者可能在
另一条路径绕过所有 pool 限制。
故障切换期间的额外风险
切换会让旧 server connections 断开,新主同时接受大量重连。连接池要在新主 admission
前限速,HAProxy health 收敛与 Patroni role 收敛也要分别观测。恢复后逐级 prewarm,
不要让所有 pod 同时填满 pool。第 19、20、33 章分别给出连接路径、HA 和故障切换的
完整证据模型。
single query / database / instance / whole cluster?
primary only or replicas too?
started at deploy, backup, checkpoint, traffic event, or failover?
connections, CPU, I/O, WAL and user latency which changed first?
is the signal rising, flat, oscillating, or recovering?
pg_stat_activity by app/state/wait
pg_blocking_pids root tree
pg_stat_statements workload deltas
pg_stat_database temp/deadlock/session deltas
pg_stat_io by backend/context