本地主机能否搭建PostgreSQL流复制主从架构?
方案可行性说明
在单台本地主机(Localhost)上搭建PostgreSQL流复制主从架构完全可行,这是日常学习PG流复制原理、测试复制相关特性、演练主从切换流程最常用的部署方式,不存在技术层面的限制。核心前提是给主、从两个实例分配完全独立的端口、数据目录、运行进程,避免资源冲突即可。
核心实现思路
同一台机器上的两个PG实例通过本地回环地址127.0.0.1完成WAL日志流传输,不需要依赖物理网卡或外部网络,传输延迟比跨机部署更低;两个实例可以共用同一套PostgreSQL二进制程序,不需要重复安装数据库软件,只需要初始化两份独立的数据目录,分别配置不同的服务端口即可。
提前做好资源规划可以避免90%的部署报错,参考规划如下:
- 主节点(Master):服务端口
5432,数据目录/var/lib/pgsql/<你的PG版本号>/main,运行用户为系统默认的postgres - 从节点(Slave):服务端口
5433,数据目录/var/lib/pgsql/<你的PG版本号>/slave,运行用户同为postgres,提前确保该用户对从节点数据目录有完整读写权限
具体操作步骤
主节点配置
- 正常初始化主节点数据目录,启动主节点数据库服务,切换到
postgres系统用户登录psql,创建专用于流复制的账号:CREATE ROLE rep_user WITH REPLICATION LOGIN PASSWORD '自定义复制账号密码'; - 编辑主节点数据目录下的
postgresql.conf,调整复制核心参数:listen_addresses = '*' wal_level = replica max_wal_senders = 10 wal_keep_size = 1GB hot_standby = on - 编辑主节点数据目录下的
pg_hba.conf,添加从节点的复制连接白名单,因为是本地部署直接放行回环地址即可:host replication rep_user 127.0.0.1/32 md5 - 重启主节点数据库服务,让所有配置生效。
从节点配置
- 清空预先规划的从节点数据目录(操作前反复核对路径,绝对不要误删主节点数据目录),执行
pg_basebackup命令从主节点拉取全量基础备份,自动初始化从节点数据目录:
命令末尾的pg_basebackup -h 127.0.0.1 -p 5432 -U rep_user -D /var/lib/pgsql/<你的PG版本号>/slave -Fp -Xs -P -R-R参数会自动生成主从连接配置、创建从节点启动所需的标识文件,不需要手动编辑恢复配置。 - 编辑从节点数据目录下的
postgresql.conf,修改端口参数避免和主节点冲突:port = 5433 - 启动从节点数据库服务即可,PG12及以上版本会自动识别数据目录下的
standby.signal文件,以热备从节点模式启动。
状态验证
- 登录主节点psql,执行以下SQL查看流复制连接状态:
如果返回结果中存在SELECT client_addr, state, sync_state FROM pg_stat_replication;127.0.0.1对应的连接,状态为streaming,说明流复制链路已经正常建立。 - 可以在主节点创建测试表、插入测试数据,指定5433端口登录从节点查询,验证数据是否正常同步。
实操注意事项
- 所有涉及数据目录的删除、覆盖操作前必须多次核对路径,本地部署时主从目录路径相似度高,误删主节点数据会直接造成数据丢失
- 本地测试场景使用默认的异步复制配置即可,不需要强行配置同步复制,避免不必要的性能开销
- 测试主从切换流程时,必须先关闭原主节点的数据库进程,再将从节点提升为主节点,避免两个节点同时以读写模式运行产生数据分歧
- 如果需要部署多个从节点,只要顺延分配不同端口、新建独立数据目录重复从节点配置流程即可,没有数量上的硬限制
内容的提问来源于stack exchange,提问作者Nagaraj
相关产品推荐
相关产品推荐

