1、在 node1 初始化 PostgreSQL(主库)
bash
postgresql-setup --initdb
编辑 /var/lib/pgsql/data/postgresql.conf(关键参数):
bash
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
archive_mode = on
archive_command = 'cd .'
hot_standby = on
编辑 /var/lib/pgsql/data/pg_hba.conf,允许 node2 访问和复制:
bash
# 允许从库复制
host replication repl 10.99.50.32/32 md5
# 允许业务库访问
host all all 10.99.50.32/32 md5
host all all 10.99.50.31/32 md5
启动主库:
bash
systemctl enable --now postgresql
创建复制用户和业务库用户:
bash
sudo -u postgres psql <<EOF
CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD 'ReplPass123!';
CREATE DATABASE kea;
CREATE USER kea WITH PASSWORD 'KeaPass123!';
GRANT ALL PRIVILEGES ON DATABASE kea TO kea;
CREATE DATABASE stork;
CREATE USER stork WITH PASSWORD 'StorkPass123!';
GRANT ALL PRIVILEGES ON DATABASE stork TO stork;
EOF
配置postgres用户本地登录认证:
修改postgres密码
bash
sudo -u postgres psql
ALTER USER postgres WITH PASSWORD 'PgPass123!';
修改/var/lib/pgsql/data/pg_hba.conf
bash
local all all md5
重新加载数据库
bash
systemctl reload postgresql
2、在 node2 配置从库
先停掉 node2 的 PostgreSQL 并清空数据目录:
bash
systemctl stop postgresql
rm -rf /var/lib/pgsql/data/*
从主库做 base backup:
bash
sudo -u postgres PGPASSWORD='ReplPass123!' pg_basebackup -h 10.99.50.31 -D /var/lib/pgsql/data -U repl -P -R
启动从库:
bash
systemctl enable --now postgresql
3、在主库上确认复制状态
bash
sudo -u postgres psql -c "SELECT client_addr, state, sync_state FROM pg_stat_replication;"
