复制与回放

节点示例:pg-a 主、pg-b 备。复制槽名 slot_pg_b

主上看副本

SELECT application_name, client_addr, state, sync_state,
       replay_lag, write_lag, flush_lag
FROM pg_stat_replication;

备库:

SELECT pg_is_in_recovery();
SELECT now() - pg_last_xact_replay_timestamp() AS replay_delay;

复制槽

槽会阻止 WAL 被删。副本挂了很久、槽还在,主库 pg_wal 会涨。

SELECT slot_name, slot_type, active, restart_lsn
FROM pg_replication_slots;

不用的槽删掉。不要留「以后可能用」的槽在生产主库上过夜。

物理 vs 逻辑

  • 物理:整实例级别,版本要兼容,恢复和 HA 常用
  • 逻辑:可按表订,跨版本、做迁移,有限制(DDL、序列、大对象等要单独设计)

注意

提升备库是架构动作,不是重启。脑裂会丢数。切换步骤写清楚:确认旧主不再写,再改连接。

参考:High Availability