在 Debian 上配置 PostgreSQL 主从(常称 流复制 / Streaming Replication)一般分为以下几步。以下以 Debian 11/12 + PostgreSQL 15/16 为例,主库叫 Primary,从库叫 Standby。
假设:
192.168.1.10192.168.1.20/var/lib/postgresql/15/main/etc/postgresql/15/main两台机器都安装 PostgreSQL:
sudo apt update
sudo apt install postgresql postgresql-client
postgresql.confsudo nano /etc/postgresql/15/main/postgresql.conf
关键参数:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
hot_standby = on
pg_hba.conf允许从库连接:
sudo nano /etc/postgresql/15/main/pg_hba.conf
添加:
host replication replicator 192.168.1.20/32 md5
sudo -u postgres psql
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'yourpassword';
sudo systemctl restart postgresql
sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/15/main/*
sudo -u postgres pg_basebackup \
-h 192.168.1.10 \
-U replicator \
-D /var/lib/postgresql/15/main \
-Fp -Xs -P -R
参数说明:
-R:自动生成 standby.signal-Xs:流式复制 WAL确认存在:
/var/lib/postgresql/15/main/standby.signal
postgresql.auto.conf 中应有:
primary_conninfo = 'host=192.168.1.10 port=5432 user=replicator password=yourpassword'
sudo systemctl start postgresql
sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"
应能看到从库连接。
sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
返回:
pg_is_in_recovery
-------------------
t
synchronous_standby_names = 'standby1'
如果你告诉我:
我可以给你更精确的步骤或一键脚本。