下面以 CentOS 7/8 + PostgreSQL 12/13/14 为例,讲一下 基于流复制(Streaming Replication)的一主一从 配置方法,这是最常见、最推荐的方式。
| 角色 | IP | 主机名 |
|---|---|---|
| 主库 | 192.168.1.10 | master |
| 从库 | 192.168.1.11 | slave |
PostgreSQL 安装路径(示例):
/var/lib/pgsql/14/data/var/lib/pgsql/14/data/postgresql.confreplicadnf install -y postgresql-server postgresql-contrib
# 或 yum
初始化(仅主库首次):
postgresql-setup --initdb
systemctl enable postgresql
systemctl start postgresql
su - postgres
psql
CREATE ROLE replica WITH REPLICATION PASSWORD 'replica123' LOGIN;
postgresql.confvi /var/lib/pgsql/14/data/postgresql.conf
关键配置:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
pg_hba.confvi /var/lib/pgsql/14/data/pg_hba.conf
添加从库访问权限:
host replication replica 192.168.1.11/32 md5
systemctl restart postgresql
dnf install -y postgresql-server
systemctl stop postgresql
rm -rf /var/lib/pgsql/14/data/*
su - postgres
pg_basebackup -h 192.168.1.10 -U replica -D /var/lib/pgsql/14/data -P -R
-R 会自动生成 standby.signal
vi /var/lib/pgsql/14/data/postgresql.conf
hot_standby = on
systemctl start postgresql
SELECT * FROM pg_stat_replication;
能看到 slave 连接即成功。
SELECT pg_is_in_recovery();
返回 t 表示从库。
✅ 防火墙
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
✅ SELinux
setsebool -P postgresql_can_network_connect on
✅ 时间同步
ntpdate pool.ntp.org
synchronous_commit)如果你告诉我:
我可以给你更精确的配置。