下面以 CentOS 7/8 为例,说明如何配置 PostgreSQL 主从(流复制,Streaming Replication)。以 PostgreSQL 13 为例(其他版本类似)。
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql13-server postgresql13
/usr/pgsql-13/bin/postgresql-13-setup initdb
systemctl enable postgresql-13
systemctl start postgresql-13
vi /var/lib/pgsql/13/data/postgresql.conf
关键配置:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
vi /var/lib/pgsql/13/data/pg_hba.conf
添加从库访问权限:
host replication repluser 192.168.1.11/32 md5
su - postgres
psql
CREATE ROLE repluser WITH REPLICATION PASSWORD 'Password123' LOGIN;
systemctl restart postgresql-13
yum install -y postgresql13-server postgresql13
systemctl stop postgresql-13
rm -rf /var/lib/pgsql/13/data/*
su - postgres
pg_basebackup -h 192.168.1.10 -U repluser -D /var/lib/pgsql/13/data -P -X stream -R
-R参数会自动生成standby.signal和primary_conninfo
vi /var/lib/pgsql/13/data/postgresql.conf
hot_standby = on
systemctl start postgresql-13
SELECT * FROM pg_stat_replication;
看到从库信息即成功。
SELECT pg_is_in_recovery();
返回 t 表示从库。
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
setsebool -P postgresql_can_network_connect on
pg_hba.conf/var/lib/pgsql/13/data/log/synchronous_commit = on如果你需要 Docker / CentOS Stream / PG15 / 同步复制 / 自动故障切换(Patroni) 的方案,也可以告诉我。