温馨提示×

Debian PostgreSQL数据同步解决方案

小樊
48
2026-01-03 18:54:12
栏目: 云计算

Debian 上可用的 PostgreSQL 数据同步方案与选型

方案 同步方式 典型用途 优点 局限
流复制(异步/同步,物理复制) 基于 WAL 的连续流式传输 主从/主备、读写分离、近实时同步 延迟低、对应用透明、成熟稳定 备库只读;版本/平台需兼容;需监控复制延迟
逻辑复制 基于表级/库级变更复制 部分表跨版本/跨集群迁移、微服务解耦 灵活选择对象、跨版本/跨平台 不复制 DDL(需额外处理)、约束/触发器需评估
pg_dump / pg_restore 逻辑导出/导入 一次性迁移、小中型库、跨平台 简单易用、可选择性对象 停机时间长、不适合持续同步
pg_dumpall + psql 全库逻辑导出/导入 整实例迁移、初始化从库 一致性好、覆盖全局对象 体积大、导入慢、不适合持续同步
第三方工具(pgloader、Barman 等) 批量导入/备份恢复 异构迁移、备份与时间点恢复 自动化程度高、功能丰富 需学习成本、依赖外部工具链

以上方案在 Debian 上均可落地,选择取决于你的一致性要求、停机容忍度、版本差异与运维能力


流复制一主一从快速落地步骤

  • 环境约定

    • 主库:192.168.1.112,从库:192.168.1.113,版本:PostgreSQL 15(Debian 12)
    • 数据目录:/var/lib/postgresql/15/main
    • 复制用户:replicator,认证方式:scram-sha-256
  • 主库配置

    1. 编辑配置文件(路径随版本可能为 /etc/postgresql/15/main/
      • postgresql.conf
        • listen_addresses = ‘*’
        • wal_level = replica
        • max_wal_senders = 10
        • archive_mode = on
        • archive_command = ‘cp %p /var/lib/postgresql/15/main/archive/%f’
      • pg_hba.conf(追加)
        • host replication replicator 192.168.1.113/24 scram-sha-256
    2. 创建复制用户
      • createuser --replication -P replicator
    3. 创建 WAL 归档目录并授权
      • mkdir -p /var/lib/postgresql/15/main/archive
      • chown postgres:postgres /var/lib/postgresql/15/main/archive
    4. 使配置生效
      • systemctl reload postgresql 或 pg_ctl reload -D /var/lib/postgresql/15/main
  • 从库初始化与启动

    1. 清空数据目录并拉取基础备份
      • sudo systemctl stop postgresql
      • sudo -u postgres rm -rf /var/lib/postgresql/15/main/*
      • sudo -u postgres pg_basebackup -h 192.168.1.112 -U replicator -D /var/lib/postgresql/15/main -P -v -R -X stream -C -S slot1
      • 说明:-R 会自动写入 primary_conninfo;-X stream 拉取 WAL;-C -S 创建复制槽(slot1)
    2. 启动从库
      • sudo systemctl start postgresql
    3. 验证
      • 主库:select * from pg_stat_replication;(应见 state=streaming、sync_state=async)
      • 从库:select * from pg_stat_wal_receiver;(应见接收/回放进度)
  • 可选增强

    • 使用复制槽避免 WAL 被过早回收:在主库创建 slot(如上 -S slot1),并在从库 recovery 配置或 primary_conninfo 中对应设置。
    • 需要同步提交时,可调整 synchronous_standby_names 与 synchronous_commit,实现同步/半同步提交(以性能换一致性)。

逻辑复制与迁移工具

  • 逻辑复制要点

    • 适合跨版本/跨集群、按表/库复制;不复制 DDL,需自建 DDL 变更流程。
    • 发布端:CREATE PUBLICATION pub_name FOR ALL TABLES;(或指定表)
    • 订阅端:CREATE SUBSCRIPTION sub_name CONNECTION ‘host=主库 port=5432 user=replicator password=xxx dbname=目标库’ PUBLICATION pub_name;
    • 注意:主键/唯一约束、触发器、默认值、序列等需在主从一致或额外处理。
  • 迁移与批量导入

    • 整库/全实例迁移:pg_dumpall -U postgres -f backup.sql;目标库 psql -f backup.sql
    • 单库/自定义格式:pg_dump -U user -d db -F c -b -v -f backup.dump;目标库 pg_restore -U user -d db -v backup.dump
    • 异构/大数据量导入:pgloader 可将多源(CSV/MySQL/SQLite 等)快速导入 PostgreSQL,适合一次性迁移或 CDC 前置落地。

备份恢复与高可用扩展

  • 备份与时间点恢复(PITR)

    • 基础备份:pg_basebackup
    • WAL 归档:archive_command 指向归档目录(如上 cp %p /var/lib/postgresql/15/main/archive/%f)
    • 恢复:将基础备份恢复到目标目录,编辑 recovery.conf(或 standby.signal + postgresql.auto.conf)设置 restore_command 与(可选)recovery_target_time,启动实例自动回放至目标时间点。
  • 高可用与读写分离

    • 读写分离/连接池:部署 Pgpool-II,配置后端节点权重,实现读写分离与故障切换;Pgpool-II 节点可独立于数据库节点部署。

监控与常见问题

  • 关键监控

    • 复制状态:主库 select * from pg_stat_replication;(关注 state、sent_lsn/write_lsn/flush_lsn/replay_lsn、sync_state)
    • 从库回放:select * from pg_stat_wal_receiver;(关注 receive/ replay 进度)
    • 复制延迟:write_lag / flush_lag / replay_lag(单位随版本可能为 ms/µs),结合业务 SLA 设置告警。
  • 常见问题与处理

    • WAL 被回收导致复制中断:启用复制槽或调大 wal_keep_size/wal_keep_segments,确保备库追赶速度大于 WAL 产生速度。
    • 归档失败/磁盘满:监控归档目录容量,设置合理的 archive_command 与清理策略(如按日分目录并定期清理旧文件)。
    • 版本/平台不兼容:物理复制要求主从版本一致、平台位数一致;跨版本优先评估逻辑复制或导出导入方案。

0