在 CentOS 8 上配置 PostgreSQL 14 的主从复制,并设置 WAL 归档到特定路径 /home/postgres/archive
的步骤如下:
主服务器配置(主机)
-
配置 PostgreSQL:
- 编辑
postgresql.conf
文件:
vim /data/postgres/pgdata/postgresql.conf
- 设置以下参数:
listen_addresses = '*' # 允许所有地址连接wal_level = replica # 设置 WAL 级别为 replicamax_wal_senders = 10 # 设置最大 WAL 发送者数量archive_mode = on # 打开归档模式archive_command = 'cp %p /home/postgres/archive/%f' # 设置 WAL 归档命令
- 编辑
-
配置客户端认证文件(pg_hba.conf):
- 允许从服务器连接到主服务器:
vim /data/postgres/pgdata/pg_hba.conf
- 添加以下行:
host replication replica_user slave_ip/32 trust
其中
replica_user
是复制用户,slave_ip
是从服务器的 IP 地址。 -
创建复制用户:
psql -c "CREATE USER replica_user REPLICATION LOGIN CONNECTION LIMIT 2;"
-
创建归档目录:
sudo mkdir -p /home/postgres/archive sudo chown postgres:postgres /home/postgres/archive sudo chmod 700 /home/postgres/archive
-
重启 PostgreSQL 服务:
sudo systemctl restart postgresql-14
从服务器配置(从机)
-
停止 PostgreSQL 服务:
sudo systemctl stop postgresql-14
-
清空数据目录:
- 确保
/data/postgres/pgdata/
目录是空的。
sudo rm -rf /data/postgres/pgdata/*
- 确保
-
使用 pg_basebackup 复制数据:
sudo -u postgres pg_basebackup -h master_ip -D /data/postgres/pgdata/ -U replica_user -v -P --wal-method=stream
其中
master_ip
是主服务器的 IP 地址。 -
配置
postgresql.conf
:vim /data/postgres/pgdata/postgresql.conf
- 添加以下行:
primary_conninfo = 'host=master_ip user=replica_user'
-
启动 PostgreSQL 服务:
sudo systemctl start postgresql-14
验证复制和归档状态
-
在主服务器上验证复制状态:
psql -c "SELECT * FROM pg_stat_replication;"
-
在从服务器上验证是否处于恢复模式:
psql -c "SELECT pg_is_in_recovery();"
-
检查 WAL 归档:
- 确认
/home/postgres/archive
目录中是否有 WAL 文件被归档。
- 确认
注意事项
- 确保归档目录
/home/postgres/archive
有足够的磁盘空间。 - 定期监控和管理归档目录,以防止其过度增长。
- 在生产环境中,考虑实施更复杂的归档策略。
这些步骤涉及基本的主从复制和 WAL 归档配置,具体需求和环境可能需要额外的调整和优化。