PostgreSQL流复制配置步骤详解

2025-06发布13次浏览

PostgreSQL流复制是一种高可用性和灾难恢复的解决方案,它通过主从架构将主数据库(Primary)上的事务日志(WAL,Write-Ahead Logging)实时传输到备数据库(Standby),从而实现数据的同步和备份。以下是配置PostgreSQL流复制的详细步骤解析。


1. 环境准备

在开始配置之前,确保以下条件已满足:

  • 主库和备库均已安装相同版本的PostgreSQL。
  • 主库和备库之间可以通过网络通信。
  • 主库和备库的用户具有足够的权限来执行相关操作。

配置文件路径:

  • 主库配置文件:postgresql.confpg_hba.conf
  • 备库配置文件:postgresql.confrecovery.conf

2. 配置主库

主库负责生成WAL日志并将其发送给备库。

2.1 修改postgresql.conf

编辑主库的postgresql.conf文件,添加或修改以下参数:

wal_level = replica          # 设置WAL级别为replica(支持流复制)
max_wal_senders = 3         # 允许的最大并发WAL发送进程数
wal_keep_segments = 32      # 保留的WAL段数量(根据实际需求调整)
archive_mode = on           # 开启归档模式(可选)
archive_command = 'cd .'    # 归档命令(可选)
hot_standby = on            # 允许热备查询

2.2 修改pg_hba.conf

为了让备库能够连接到主库,需要在pg_hba.conf中添加如下记录:

host    replication     replicator     <standby_ip>/32     md5

其中:

  • replication 表示允许进行复制连接。
  • replicator 是用于复制的用户名。
  • <standby_ip> 是备库的IP地址。

2.3 创建复制用户

在主库上创建一个专门用于复制的用户:

CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password';

3. 配置备库

备库接收来自主库的WAL日志,并应用这些日志以保持与主库的数据一致性。

3.1 初始化备库

使用pg_basebackup工具从主库复制数据到备库:

pg_basebackup -h <primary_ip> -D /path/to/standby/data -U replicator -v -P --xlog-method=stream

说明:

  • -h 指定主库IP地址。
  • -D 指定备库数据目录。
  • -U 指定复制用户。
  • --xlog-method=stream 表示通过流复制获取WAL日志。

3.2 创建recovery.conf

在备库的数据目录下创建recovery.conf文件,内容如下:

standby_mode = 'on'
primary_conninfo = 'host=<primary_ip> port=5432 user=replicator password=your_password'
trigger_file = '/path/to/trigger_file'
restore_command = 'cp /path/to/archive/%f %p'

说明:

  • primary_conninfo 是主库的连接信息。
  • trigger_file 用于触发备库切换为主库(仅适用于手动故障转移)。
  • restore_command 是从归档中恢复WAL文件的命令(如果启用了归档模式)。

4. 启动服务

4.1 启动主库

确保主库正常启动:

pg_ctl start -D /path/to/primary/data

4.2 启动备库

启动备库后,它会自动连接到主库并开始同步数据:

pg_ctl start -D /path/to/standby/data

5. 验证流复制状态

5.1 查看主库状态

在主库上执行以下SQL查询,检查WAL发送进程的状态:

SELECT * FROM pg_stat_replication;

输出结果应显示备库的连接信息。

5.2 查看备库状态

在备库上执行以下SQL查询,检查WAL接收进程的状态:

SELECT * FROM pg_stat_wal_receiver;

输出结果应显示主库的连接信息以及同步延迟。


6. 故障转移(可选)

如果主库发生故障,可以通过创建trigger_file文件将备库提升为主库。例如:

touch /path/to/trigger_file

备库检测到该文件后会自动切换为主库。


7. 注意事项

  • 网络延迟:流复制的性能受网络延迟影响较大,建议主备库之间的网络尽量稳定且低延迟。
  • 磁盘空间:确保主库有足够的磁盘空间存储未被备库消费的WAL日志。
  • 安全性:复制用户密码应妥善保管,避免泄露。