PostgreSQL主从配置入门:流复制搭建与故障切换验证

先确认这套方案是否适合你

PostgreSQL 主从配置最常见的方式是流复制(Streaming Replication)。
它让从库持续接收主库的 WAL 日志,实现接近实时的数据同步。
如果目标是读写分离、数据热备或故障时快速切换,这套方案基本够用。

需要提前说明的是,本文以 PostgreSQL 12 及以上版本为例,命令和参数在较新版本中通用。
操作前请确保两台服务器网络互通,并且已经安装好相同大版本的 PostgreSQL。
主从版本差异过大时,复制可能直接失败。

准备两台机器和基础环境

假设主库 IP 是 192.168.1.10,从库 IP 是 192.168.1.11,系统为常见 Linux 发行版。

先在两台机器上确认 PostgreSQL 已安装并运行:

systemctl status postgresql
psql --version

随后在主库创建复制专用账号。
不要直接用超级用户做流复制,权限太大,误操作风险高。

CREATE ROLE repl LOGIN REPLICATION ENCRYPTED PASSWORD '你的强密码';

然后编辑主库的 postgresql.conf,
通常路径在 /etc/postgresql/版本号/main/postgresql.conf 或 /var/lib/pgsql/data/postgresql.conf。

listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 512MB

wal_keep_size 在 PostgreSQL 13 之后使用,旧版本对应 wal_keep_segments。
它的作用是保留足够多的 WAL,防止从库短暂断连后找不到日志。

再编辑 pg_hba.conf,允许从库用 repl 账号连接:

host    replication     repl    192.168.1.11/32    md5

修改后重启主库:

systemctl restart postgresql

重启后验证复制账号能否连接:

psql -h 192.168.1.10 -U repl -d postgres -c "IDENTIFY_SYSTEM;"

如果能返回 systemid 和时间线信息,说明主库侧准备完成。

用 pg_basebackup 初始化从库

从库需要先停掉 PostgreSQL,并清空数据目录。这一步会删除从库原有数据,操作前务必确认从库没有需要保留的业务数据。

systemctl stop postgresql
mv /var/lib/postgresql/版本号/main /var/lib/postgresql/版本号/main.bak
mkdir -p /var/lib/postgresql/版本号/main
chown postgres:postgres /var/lib/postgresql/版本号/main

然后以 postgres 用户执行基础备份:

su - postgres
pg_basebackup -h 192.168.1.10 -U repl -p 5432 -D /var/lib/postgresql/版本号/main -Fp -Xs -P -R

参数含义:-Fp 表示普通文件格式,-Xs 表示流式传输 WAL,-P 显示进度,-R 会自动生成 standby.signal 并在 postgresql.auto.conf 中写入 primary_conninfo。

如果 -R 没有自动写入连接信息,可以手动在从库数据目录创建 postgresql.auto.conf:

primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=你的强密码'

同时确认数据目录下存在 standby.signal 文件。
这个文件告诉 PostgreSQL 当前实例以从库身份启动。

启动从库并验证复制状态

在从库启动服务:

systemctl start postgresql

登录主库查看复制连接:

SELECT client_addr, state, sync_state FROM pg_stat_replication;

如果看到从库 IP、state 为 streaming,说明流复制已经建立。

再登录从库执行只读查询:

SELECT pg_is_in_recovery();

返回 t 表示当前处于恢复模式,也就是从库状态。
此时在从库执行写操作会报错,这是正常现象。

可以进一步在主库建表插入数据,然后在从库查询,确认数据同步:

-- 主库
CREATE TABLE test_repl(id int);
INSERT INTO test_repl VALUES (1);

-- 从库
SELECT * FROM test_repl;

如果从库能查到相同数据,说明主从配置已经生效。

容易踩坑的几个地方

密码认证失败:先检查 pg_hba.conf 中的 IP 和认证方式,修改后必须 reload 或 restart。

从库启动报找不到 WAL:通常是 wal_keep_size 太小或从库断连时间过长。
可以考虑启用复制槽,但复制槽会占用主库磁盘,需要监控。

防火墙未放行 5432:主从之间需要双向或至少从库到主库的 5432 端口连通。
可以用 telnet 192.168.1.10 5432 快速测试。

数据目录权限不对:pg_basebackup 和目标目录必须由 postgres 用户拥有,否则从库无法启动。

主从延迟持续增大:
查看从库 pg_stat_wal_receiver 和主库 pg_stat_replication 的 write_lag、flush_lag、replay_lag 字段,
判断是网络问题还是从库磁盘性能不足。

什么时候需要进一步做故障切换

流复制本身只解决数据同步,不自动处理主库宕机。
如果业务不能接受手动切换,需要引入 Patroni、repmgr 或云数据库自带的高可用组件。
生产环境还建议配置同步复制或至少监控复制延迟,避免切换到数据落后的从库。

如果只是用于报表查询、备份或测试环境,当前这套主从配置已经够用。
上线前记得把复制账号密码、pg_hba.conf 访问范围和备份策略一起纳入检查清单。

分享到:
上一篇
Redis持久化RDB与AOF:配置、恢复与避坑实操
下一篇
Elasticsearch集群搭建:3节点生产环境实操教程
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意