CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
PostgreSQL DBA 入门/课时/复制与高可用
RawBlame
课时目录12 节

PostgreSQL DBA 入门

  1. 01DBA 职责与 PG 架构
  2. 02安装与部署
  3. 03安全与权限
  4. 04SQL 与事务
  5. 05对象模型与类型
  6. 06索引与执行计划
  7. 07性能与监控
  8. 08备份与恢复
  9. 09复制与高可用
  10. 10PL/pgSQL 与触发器
  11. 11自动化运维
  12. 12综合练习

复制与高可用

流复制、Patroni、PgBouncer。

35 分钟

流复制与高可用

流复制(Streaming Replication) 将 WAL 实时传到备库;配合 Patroni / repmgr 可实现自动故障切换。与 /roadmaps/postgresql-dba 复制节点对齐。

学习目标

  • 配置一主一备物理流复制
  • 区分同步与异步复制的 RPO 影响
  • 了解只读副本与读写分离接入方式

核心概念

主库准备

CREATE ROLE replicator LOGIN REPLICATION PASSWORD 'replpass';
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
synchronous_commit = on   -- 同步复制时
synchronous_standby_names = 'standby1'

备库 base backup

pg_basebackup -h primary-host -U replicator -D /var/lib/pgsql/data \
  -Fp -Xs -P -R -S standby1

-R 写入 primary_conninfo;备库 hot_standby = on 可只读查询。

复制状态

SELECT client_addr, state, sync_state,
       pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS lag_bytes
FROM pg_stat_replication;
-- 备库
SELECT pg_is_in_recovery(), pg_last_wal_replay_lsn();

lag 持续增大需查网络、磁盘或备库负载。

读写分离

Spring 写 → Primary
Spring 读(可选)→ Replica(注意复制延迟读旧数据)

可用 Hikari 双数据源 或中间件;与 MySQL 主从只读实例思路相同。

与 MySQL/Spring Boot 对照

项PostgreSQLMySQL 8
物理复制流复制 WALbinlog 主从
逻辑复制Publication/Subscription无内置同等物
半同步synchronous_commitsemi-sync plugin
HA 工具Patroni, repmgrMHA, InnoDB Cluster
Spring 读分离双 DataSource@Transactional(readOnly) + 路由

本站生产 MySQL 主库;PG 练习可用 Docker 两容器模拟 primary/standby。

练习

  • 画主备 WAL 流向图并标注 lag 监控点
  • 在备库执行只读 SELECT,在主库 INSERT 后观察延迟
  • 列举异步复制下「读到旧数据」的 2 种业务规避方式
  • 小结

    流复制保 RPO;同步复制换一致性代价;读副本需处理延迟。 下一课 PL/pgSQL 与数据库内逻辑。

    加载本节练习…
    ← 上一课备份与恢复下一课 →PL/pgSQL 与触发器