下面以 CentOS 7/8 + PostgreSQL 12/13/14 为例,说明如何配置 PostgreSQL 主从(流复制,Streaming Replication)。
| 角色 | 主机名 | IP | 说明 |
|---|---|---|---|
| 主库 | master | 192.168.1.10 | 可读写 |
| 从库 | standby | 192.168.1.11 | 只读 |
PostgreSQL 安装目录(示例):
/var/lib/pgsql/14/datapostgresql-14# CentOS 8 示例
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf install -y postgresql14-server postgresql14
/usr/pgsql-14/bin/postgresql-14-setup initdb
systemctl enable --now postgresql-14
vi /var/lib/pgsql/14/data/postgresql.conf
关键配置:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
vi /var/lib/pgsql/14/data/pg_hba.conf
添加:
host replication repluser 192.168.1.11/32 md5
host all all 0.0.0.0/0 md5
su - postgres
psql
CREATE ROLE repluser WITH REPLICATION PASSWORD 'replpass' LOGIN;
systemctl restart postgresql-14
dnf install -y postgresql14-server postgresql14
su - postgres
pg_basebackup -h 192.168.1.10 -U repluser -D /var/lib/pgsql/14/data \
-Fp -Xs -P -R
参数说明:
-R:自动生成 standby.signal 和 primary_conninfohot_standby = on
systemctl enable --now postgresql-14
SELECT * FROM pg_stat_replication;
看到 standby 即为成功。
SELECT pg_is_in_recovery();
返回 t 表示从库。
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
setsebool -P postgresql_can_network_connect on
主库:
synchronous_standby_names = 'standby1'
✅ 主从核心步骤:
pg_basebackup如果你需要 CentOS 7 特定版本、Docker 部署 或 一主多从 + 延迟从库,我可以继续补充。