PostgreSQL主从复制的搭建,其实只要把这个流程理解透,操作起来并不复杂。下面咱们从头开始,把一主一从(或者一主多从)的高可用读写分离系统搭起来。 环境准备 先搞清楚两台机器各自扮演什么角色: 角色主机名/IP说明 主库192.168.1.10可读写,负责复制源 从库192.168.1.11只
PostgreSQL主从复制的搭建,其实只要把这个流程理解透,操作起来并不复杂。下面咱们从头开始,把一主一从(或者一主多从)的高可用读写分离系统搭起来。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
先搞清楚两台机器各自扮演什么角色:
| 角色 | 主机名/IP | 说明 |
|---|---|---|
| 主库 | 192.168.1.10 | 可读写,负责复制源 |
| 从库 | 192.168.1.11 | 只读,从主库同步数据 |
推荐PostgreSQL版本保持一致,比如都用15.x;操作系统用Ubuntu或CentOS都可以。
先拿Ubuntu来说,直接一条命令搞定:
sudo apt update sudo apt install postgresql postgresql-contrib -y
如果是CentOS环境:
sudo yum install -y postgresql-server postgresql-contrib
装完之后如果数据库没自动初始化,需要手动来一下:
sudo -u postgres /usr/pgsql-15/bin/initdb -D /var/lib/pgsql/15/data
这个配置文件在哪?通常在 /etc/postgresql/15/main/postgresql.conf(Debian系)或者 /var/lib/pgsql/15/data/postgresql.conf(RHEL系)。把下面这些参数改好:
# 启用 WAL 日志并设置参数 wal_level = replica max_wal_senders = 10 wal_keep_size = 128MB hot_standby = on listen_addresses = '*'
加一行规则,允许从库IP来同步数据:
# 添加允许从库复制连接 host replication all 192.168.1.11/32 md5
sudo systemctl restart postgresql
到这步,从库需要先把服务停掉,把数据目录清干净,然后用pg_basebackup从主库拉一份全量数据。
sudo systemctl stop postgresql rm -rf /var/lib/postgresql/15/main/*
pg_basebackup -h 192.168.1.10 -D /var/lib/postgresql/15/main -U postgres -P -R
这些参数的含义:-h是主库IP,-D是数据写入目录,-U是复制用户,-R的意思是一口气自动创建好standby.signal和primary_conninfo。省得咱们后面手动配了。
如果提示用户不存在,那就先到主库创建个专用复制用户:
CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'replpass';
别忘了,pg_hba.conf里也要把这个用户的连接权限放开。
去postgresql.conf里检查一下,确保 primary_conninfo 这一段是配好的:
primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=replpass'
sudo systemctl start postgresql
启动之后,建议看看日志有没有异常。日志一般在 /var/log/postgresql/postgresql-15-main.log,如果有报错信息会写得很清楚。
在主库执行下面这条SQL,能看到从库的连接状态:
SELECT * FROM pg_stat_replication;
在从库上查询,确认它是否处于恢复(只读)模式:
SELECT pg_is_in_recovery(); -- 返回 true 表示是从库
验证一下读写功能是否符合预期:
| 操作 | 主库 | 从库 |
|---|---|---|
| 创建表/插入数据 | 支持 | 禁止 |
| 查询数据 | 支持 | 支持 |
| 自动同步 | 向从库推送 | 被动接收 |
sudo systemctl enable postgresql
如果对文件放在哪里不熟,可以参考下面这个表:
| 配置文件 | 路径 |
|---|---|
| postgresql.conf | /etc/postgresql/15/main/ |
| pg_hba.conf | /etc/postgresql/15/main/ |
| 数据目录 | /var/lib/postgresql/15/main/ |
| 日志文件 | /var/log/postgresql/postgresql-15-main.log |
实操当中最常遇到的几个坑,提前列出来,省得到时候抓瞎:
| 问题 | 解决办法 |
|---|---|
| pg_basebackup 报权限错误 | 主库需创建 replication 权限用户 |
| 从库无法连接主库 | 检查主库防火墙 / pg_hba.conf |
| 主库 pg_stat_replication 为空 | 检查从库连接信息是否正确 |
| 写入从库失败 | 合理,PostgreSQL 只读备库默认禁止写入 |
如果后期要做更完善的高可用架构,以下几个工具可以重点了解一下:
| 目标 | 建议工具 |
|---|---|
| 自动故障切换 | repmgr, Patroni |
| 虚拟 IP 高可用切换 | Keepalived + VIP |
| 读写分离中间件 | pgpool-II |
| 多从、链式复制 | 支持 |
| 双机部署脚本化自动搭建 | Ansible/脚本工具 |
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述