下面以 CentOS 7/8 + PostgreSQL 12/13/14 为例,介绍 PostgreSQL 主从(流复制 Streaming Replication) 的典型配置步骤。
当前主流且推荐的方式是 物理流复制(Physical Streaming Replication)。
| 角色 | 主机名 | IP | 说明 |
|---|---|---|---|
| 主库 | master | 192.168.1.10 | 读写 |
| 从库 | slave | 192.168.1.11 | 只读 |
PostgreSQL 数据目录示例:
/var/lib/pgsql/14/data
# 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-contrib
初始化数据库:
/usr/pgsql-14/bin/postgresql-14-setup initdb
systemctl enable postgresql-14
systemctl start postgresql-14
postgresql.confvim /var/lib/pgsql/14/data/postgresql.conf
关键参数:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 64MB
hot_standby = on
pg_hba.confvim /var/lib/pgsql/14/data/pg_hba.conf
添加复制权限:
# 允许从库通过复制协议连接
host replication repl 192.168.1.11/32 md5
su - postgres
psql
CREATE USER repl REPLICATION LOGIN PASSWORD 'repl_password';
systemctl restart postgresql-14
dnf install -y postgresql14-server postgresql14-contrib
su - postgres
pg_basebackup -h 192.168.1.10 -U repl -D /var/lib/pgsql/14/data \
-Xs -P -R
参数说明:
-R:自动生成 standby.signal-Xs:使用流复制方式-P:显示进度执行后会提示输入密码(repl 用户密码)。
确认以下文件存在:
ls /var/lib/pgsql/14/data/standby.signal
确认 postgresql.conf 或 postgresql.auto.conf 包含:
primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=repl_password'
systemctl enable postgresql-14
systemctl start postgresql-14
psql
SELECT pid, usename, application_name, client_addr, state
FROM pg_stat_replication;
正常会看到 streaming 状态。
SELECT pg_is_in_recovery();
返回 t 表示从库。
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
setenforce 0
# 或配置 pgdata 上下文
PostgreSQL 本身 不自动 failover,需要借助:
✅ 主从配置核心步骤:
wal_level = replicapg_hba.confpg_basebackup如果你需要 CentOS 7 + PostgreSQL 版本、Docker 主从、异步/同步复制配置,或 故障切换方案,可以继续问我。