热备

来自 PostgreSQL 维基
跳转到导航跳转到搜索

热备是指在当前执行归档恢复的数据库上运行查询的能力。日志传输复制允许您创建主节点(或主节点)的一个或多个备用节点,这些节点是主节点的副本。备用节点可以用于只读查询访问。

热备由 2ndQuadrant 的 Simon Riggs 通过公开赞助开发,并包含在 PostgreSQL 9.0 中。

该功能在 PostgreSQL 8.5 Alpha3 中提交,并在 PostgreSQL 9.0 及更高版本中可用。有关完整详细信息,请参见 热备文档

此功能增强了 PostgreSQL 9.1 中引入的 流式复制 功能,但它不依赖于它,并且与它的交互最少。

问题、问题和错误

如果您有疑问/问题或希望报告错误,欢迎您通过 pgsql-bugs 或 pgsql-hackers 邮件列表 进行。请同时将与热备相关的邮件抄送至 [email protected]

快速入门

还提供了一个更全面的 二进制复制教程,但最好的起点是 PostgreSQL 热备文档

设置热备与设置温备非常相似,只是多了一些参数。强烈建议您阅读 您 PostgreSQL 版本的 PostgreSQL 热备文档,而不是依赖此快速入门指南。

您需要尝试热备的最基本的一组说明如下

  1. 创建主数据库
  2. 为 WAL 归档配置主服务器
  3. 创建主服务器的备份
  4. 启动热备实例

创建主数据库

如果您还没有适合的 PostgreSQL 主服务器,可以使用 initdb 创建主数据库。

为 WAL 归档配置主服务器

您需要更改的最有限的一组参数是

wal_level = hot_standby
archive_mode = on
archive_command = 'cp -i %p /path/to/archive/%f'

由于您可能希望使用 pg_basebackup,因此您还应该设置max_wal_senders至少为 2 或 3

max_wal_senders = 3

(生产部署建议使用更多设置来控制 WAL 保留、反馈、应用延迟等。这只是一个快速入门指南。)

现在启动主数据库。

创建主服务器的备份

使用 pg_basebackup 复制主服务器 (9.1+)

创建基本备份的最佳选择是使用随 PostgreSQL 9.1 及更高版本提供的标准 pg_basebackup 工具。如果您打算使用 9.0,则需要使用自己的脚本,使用pg_start_backup, pg_stop_backup, rsync或类似方法,以及 WAL 归档。pg_basebackup强烈建议。

一个简单的示例可能是,作为postgres想要在当前目录中放置一个试用热备的用户,可以运行

pg_basebackup -D hotstandby2 -w -R --xlog-method=stream --dbname="host=master user=postgres"

更典型的备用位置是在/var/lib/pgsql/var/lib/postgresql下,具体取决于您的安装。

Windows 和 Mac 用户可以使用 pg_basebackup,它不限于 unix/linux。它不必作为postgres用户运行,这只是 unix/linux 系统上的约定。

编写主服务器到副本的复制脚本

如果您在同一台机器上进行测试,并且在主服务器上启用了 WAL 归档,那么以下脚本可能会代替您使用pg_basebackup:

#!/bin/sh

psql postgres -c "select pg_start_backup('backup')"
cp -pr hotstandby1/ hotstandby2 
psql postgres -c "select pg_stop_backup()"
rm hotstandby2/postmaster.pid
rm -r hotstandby2/pg_xlog/*

配置主服务器的副本以作为热备运行

echo 'hot_standby = on' >> hotstandby2/postgresql.conf
echo 'port = 5433' >> hotstandby2/postgresql.conf
echo "standby_mode = 'on'" >> hotstandby2/recovery.conf
# If you're using WAL archiving:
echo "restore_command = 'cp -i /path/to/archive/%f %p'" >> hotstandby2/recovery.conf

这可能会因情况而异 - 如果您在两个不同的服务器或虚拟机之间进行传输,则需要配置主服务器,以便使用 RSYNC 等工具传输 WAL。

启动备用服务器

使用 pg_ctl 或您的操作系统的等效启动命令启动备用服务器,以与您创建pg_basebackup的相同用户身份运行

pg_ctl -D hotstandby2 -l hotstandby2.log start

使用

诊断问题

有时您无法连接的原因。检查日志以获取消息。

首先,检查您是否连接到正确的服务器,以及服务器是否处于恢复状态。您可以查看 "ps" 输出,并查找 "启动进程"。如果您找不到任何进程,则说明您未处于恢复状态。

   SELECT pg_is_in_recovery();

如果您能够连接,请通过运行以下命令检查您是否处于恢复状态

如果您认为您应该能够看到某个对象或某些数据,请检查备用服务器是否已处理所有未完成的 WAL。可能是备用服务器落后了。

   SELECT txid_current_snapshot();

查看当前快照,使用

查看 pg_locks 和 pg_stat_activity。

当前待办事项

最新的待办事项