SuperAPI AI 工具集

postgres-impl-streaming-replication

数据与分析

查看项目

更新于 10-15 22:18

技能介绍

用途:指导 PostgreSQL 物理(流式)复制的实施与运维,把原始 WAL 记录经 TCP 从主库送到一个或多个备库,备库为整个集群(所有数据库、角色、表)的字节级副本并持续重放 WAL。它不具备选择性,行级或跨大版本复制应使用逻辑复制;时间点恢复与备份应使用备份恢复技能。

主要能力:

  1. 准备主库:创建仅含 REPLICATION 与 LOGIN 的专用角色,配置 wal_level=replica、max_wal_senders、max_replication_slots,并在 pg_hba.conf 添加 host replication 行(replication 是特殊伪数据库关键字,普通 host all 行不授予复制权限),使用 scram-sha-256。
  2. 用 pg_basebackup 克隆备库:务必加 -R(--write-recovery-conf),它写入 standby.signal 与连接设置;-X stream 保证备份一致;不要在运行中直接 cp 数据目录。
  3. 物理复制槽与容量上限:创建槽以精确保留未消费 WAL,但必须同时设置 max_slot_wal_keep_size(v13+),否则消费者消失会让 pg_wal 无限增长直至磁盘写满;超出上限的槽会被置为 wal_status='lost'。
  4. 同步提交:synchronous_commit 取 off / on / remote_write / remote_apply,权衡持久性与提交延迟;配合 synchronous_standby_names 时用 ANY n (...) 或 FIRST n (...),并列出多于 n 个备库,避免单个备库故障阻塞主库全部提交。
  5. 热备只读查询与恢复冲突:hot_standby=on 时备库可读;hot_standby_feedback=on 可避免查询被取消但会让主库膨胀,或用 max_standby_streaming_delay 限制延迟、接受取消(SQLSTATE 40001)。
  6. 提升与故障切换:使用 pg_promote() 或 pg_ctl promote,promote_trigger_file 已在 v16 移除;提升前必须先隔离旧主库以防脑裂。
  7. 级联复制:中间备库需 hot_standby=on 与 max_wal_senders,级联链路始终为异步。
  8. 监控:在 pg_stat_replication 查看 sent_lsn、replay_lsn、replay_lag 等;在 pg_replication_slots 查看 wal_status 与保留的 WAL 量;备库用 now() - pg_last_xact_replay_timestamp() 观察重放延迟。

限制与注意:物理复制要求相同大版本、不可按表或行过滤;未设上限的复制槽、只指定单个同步备库、默认调优下运行长查询、直接 cp 运行中的数据目录、未配置 pg_hba 复制行、未隔离旧主库就提升,都是常见反模式。参考文档:https://www.postgresql.org/docs/17/warm-standby.html、https://www.postgresql.org/docs/17/hot-standby.html、https://www.postgresql.org/docs/17/app-pgbasebackup.html。