主库配置
1、主库修改postgresql.conf。
wal_level = replica
max_wal_senders = 10 # 最大 WAL 发送进程数,设置为从库数量 + 1
wal_keep_size = 256MB # 保留的 WAL 日志大小,防止从库落后
max_replication_slots = 10 # 最大复制槽数量,建议与从库数量一致
archive_mode = on # 启用归档(可选,用于 WAL 归档)
archive_command = 'cp %p /path/to/archive/%f' # 归档命令(可选)
2、修改 pg_hba.conf: 编辑主库的 pg_hba.conf 文件,允许从库和复制用户连接
#允许 replication_user 从任何 IP 进行复制(IP可以缩小范围)
host replication replication_user 0.0.0.0/0 md5
#允许 replication_user 访问数据库(如果需要,IP可以缩小范围)
host all replication_user 0.0.0.0/0 md5
3、创建复制角色
CREATE ROLE replication_user WITH LOGIN PASSWORD 'your_secure_password' REPLICATION;
4、重启主库
systemctl restart postgresql-13.service
从库配置
去主库拉取配置
pg_basebackup -h IP<主库IP> -U replication_user -D var/lib/postgresql/data -P --wal-method=fetch
data 目录最好先备份,然后清空。如果data 已经存在的话,可能配置拉取失败。 同时,拉取配置以后,主库的配置最好不要改动,否则有可能从库启动了,同步不下来。
配置从库的 postgresql.conf
primary_conninfo = 'host= port=5432 user=replication_user password=your_secure_password'
primary_slot_name = 'replica_slot' # 如果使用了复制槽
hot_standby = on # 允许从库接受只读查询
hot_standby_feedback = on # 向主库报告从库的查询,防止冲突
确保数据库目录权限是对的
chown -R postgres:postgres var/lib/postgresql/data
chmod -R 700 var/lib/postgresql/data
创建 standby.signal
在目录 var/lib/postgresql/data 下创建,不用写任何内容。 有该文件,数据库才会以从库的模式启动。 如果没有该文件的话执行一下命令返回f。有的话返回t
SELECT * FROM pg_stat_replication;
重启从库