postgresql主从流复制需配置主库wal_level=replica、max_wal_senders≥从库数、hot_standby=on,添加pg_hba.conf复制权限,创建replication用户,用pg_basebackup -r初始化从库,并通过pg_stat_replication验证streaming状态。

如果您正在为 PostgreSQL 数据库构建高可用架构,却发现主从数据不同步、复制中断或延迟过高,则很可能是流复制配置未生效或关键组件缺失。以下是解决 PostgreSQL 主从复制与流复制问题的多种实战方法:
一、主库核心参数配置校准
确保主库正确生成并发送 WAL 日志是流复制启动的前提。需严格检查 postgresql.conf 中影响复制能力的基础参数是否启用并匹配实际环境。
1、编辑主库配置文件:/var/lib/pgsql/14/data/postgresql.conf。
2、确认以下参数已取消注释并设为指定值:listen_addresses = '*',允许从库网络连接。
3、设置 wal_level = replica,这是流复制最低要求级别,不可为 minimal。
4、配置 max_wal_senders = 10(建议 ≥ 从库数量),否则新从库连接将被拒绝。
5、启用 hot_standby = on,使从库在恢复过程中即可接受只读查询。
6、重启主库服务使配置生效:systemctl restart postgresql-14。
二、pg_hba.conf 权限策略强化
即使主库参数正确,若客户端认证规则未明确授权复制连接,从库将无法建立 WAL 接收通道。该文件控制所有入站连接的访问权限,必须精确匹配复制用户与源 IP。
1、打开主库认证配置文件:/var/lib/pgsql/14/data/pg_hba.conf。
2、在文件末尾新增一行(替换 192.168.1.100 为从库真实 IPv4 地址):host replication replicator 192.168.1.100/32 md5。
3、确保该行位于所有 host all all ... 通用规则之前,避免被宽泛规则覆盖。
4、重载配置而不中断服务:sudo -u postgres pg_ctl reload -D /var/lib/pgsql/14/data。
三、专用复制用户创建与验证
流复制必须使用具备 REPLICATION 特权的独立数据库用户,普通超级用户或仅具 LOGIN 权限的用户无法发起复制连接。
CentOS Stream 9是基于RHEL 9技术路线的持续交付版本,适合需要贴近RHEL 9生态的软件开发、系统集成和测试环境。它相比传统CentOS Linux更靠近上游开发过程,用户可以更早看到RHEL 9后续小版本中的软件包变化。CentOS Stream 9仍是当前可用的官方版本线之一,适合对稳定性和新功能之间有平衡需求的团队使用。
1、以 postgres 用户身份登录主库:sudo -u postgres psql。
2、执行 SQL 创建复制用户:CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'SecurePass2026!';。
3、退出 psql:\q。
4、验证用户权限:sudo -u postgres psql -c "SELECT rolname, rolreplication FROM pg_roles WHERE rolname = 'replicator';",输出中 rolreplication 必须为 t。
四、从库基础备份与自动配置初始化
从库必须基于主库某一时间点的一致快照启动,且需正确标识自身为 standby 节点并预置主库连接信息。手动构造配置易出错,推荐使用 pg_basebackup 的 -R 参数自动完成。
1、在从库节点执行全量备份命令(主库需处于运行状态):pg_basebackup -h 192.168.1.9 -U replicator -D /var/lib/pgsql/14/data -P -X stream -R -C -S slave1(其中 192.168.1.9 为主库 IP,slave1 为本从库逻辑名称)。
2、该命令将自动创建 standby.signal 文件,并在 postgresql.auto.conf 中写入 primary_conninfo 连接字符串。
3、检查从库数据目录是否存在:ls -l /var/lib/pgsql/14/data/standby.signal 和 grep primary_conninfo /var/lib/pgsql/14/data/postgresql.auto.conf。
4、确保从库数据目录属主为 postgres:postgres:chown -R postgres:postgres /var/lib/pgsql/14/data。
五、复制状态实时监控与日志排查
复制链路建立后需持续验证同步状态与延迟水平。主库侧通过系统视图可直接观测从库连接及重放进度,异常时日志是首要诊断依据。
1、在主库执行查询:sudo -u postgres psql -c "SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn FROM pg_stat_replication;"。
2、确认 state 字段值为 streaming,且 replay_lsn 与 flush_lsn 差值在合理范围内(如
3、若状态为 startup 或为空,检查主库日志:tail -n 50 /var/lib/pgsql/14/data/log/postgresql-*.log,搜索关键词 replication 或 connection。
4、若从库报错 FATAL: no pg_hba.conf entry for replication connection,立即返回第二步核查认证规则语法与顺序。










