在 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 归档配置,具体需求和环境可能需要额外的调整和优化。