在 RHEL 8 上搭建 PostgreSQL 主从复制环境,其中数据目录位于 `/data/pgdata`,可以按照以下步骤进行:
### 1. 准备工作
- 确保两台 RHEL 8 服务器(主服务器和从服务器)可以相互通信。
- 在两台服务器上安装相同版本的 PostgreSQL。
- 创建 `/data/pgdata` 目录并确保 PostgreSQL 用户对其有访问权限。
### 2. 主服务器配置
1. **配置 PostgreSQL**:
- 编辑主服务器的 PostgreSQL 配置文件(通常是 `postgresql.conf`),设置数据目录和复制相关的参数:
```
data_directory = '/data/pgdata'
listen_addresses = '*' # 允许所有IP地址连接
wal_level = replica # 设置 WAL 级别为复制
max_wal_senders = 3 # 设置最大 WAL 发送进程数
```
2. **配置客户端认证文件**:
- 编辑 `pg_hba.conf` 文件,允许从服务器连接并进行复制:
```
host replication all 从服务器IP/32 trust
```
3. **重启 PostgreSQL**:
- 重启 PostgreSQL 服务以应用更改:
```
systemctl restart postgresql
```
4. **创建复制槽** (可选):
- 在主服务器上创建一个复制槽,这有助于管理 WAL 文件:
```
SELECT * FROM pg_create_physical_replication_slot('replication_slot');
```
### 3. 从服务器配置
1. **停止 PostgreSQL 服务**:
- 在从服务器上停止 PostgreSQL 服务:
```
systemctl stop postgresql
```
2. **清理旧数据**:
- 清空 `/data/pgdata` 目录:
```
rm -rf /data/pgdata/*
```
3. **使用 pg_basebackup 进行基础备份**:
- 从主服务器获取数据的基础备份:
```
pg_basebackup -h 主服务器IP -D /data/pgdata -U 复制用户 -v -P --wal-method=fetch
```
4. **配置从服务器**:
- 创建一个名为 `recovery.conf` 的文件(PostgreSQL 12 以前)或在 `postgresql.conf` 中添加复制配置(PostgreSQL 12 及以后版本),包括连接到主服务器的信息:
```
standby_mode = 'on'
primary_conninfo = 'host=主服务器IP port=5432 user=复制用户 password=密码'
```
5. **启动 PostgreSQL 服务**:
- 启动从服务器上的 PostgreSQL 服务:
```
systemctl start postgresql
```
### 4. 验证复制
- 在主服务器上创建一些数据,然后检查这些数据是否出现在从服务器上,以验证复制是否成功。
### 注意事项
- 确保防火墙和安全组规则允许两台服务器之间的相应端口通信。
- 适当设置 PostgreSQL 用户和复制用户的密码,并在实际操作中替换示例命令中的 `复制用户` 和 `密码`。
- 根据您的 PostgreSQL 版本,一些配置和步骤可能有所不同。
通过这些步