1

我公司的网站使用 PostgreSQL 数据库。在我们的数据中心,我们有一个主数据库和一些只读从数据库,我们使用 Londist 在它们之间进行连续复制。

我想为报告目的设置另一个只读从数据库,并且我希望这个从数据库位于远程位置(数据中心之外)。这个从站不需要 100% 是最新的。如果它长达 24 小时,那很好。另外,我想尽量减少我在主数据库上的负载。由于我们的主数据库白天忙,晚上空闲,我认为一个好主意(如果可能的话)是让报告从站每晚赶上一次。

我正在考虑为此使用日志传送,如 http://www.postgresql.org/docs/8.4/static/continuous-archiving.html中所述

我的计划是:

  1. 在主数据库上设置 WAL 归档
  2. 生成完整的数据库快照并将其复制到远程位置
  3. 恢复数据库并让它赶上
  4. 进入稳定状态,其中:
    • DAYTIME - 数据库落后,但人们可以查询它
    • 晚上——我复制了一天的 WAL 文件并让数据库赶上

注意:这里的关键是我只需要复制一次完整的数据库快照。此后,我应该只需要复制一天的 WAL 文件就可以让远程从站再次赶上。

因为在我想要一些反馈/建议之前我还没有完成日志传送。

这行得通吗?PostgreSQL 是否支持这种重复恢复?

对于如何设置远程半新鲜只读从站,您还有其他建议吗?

谢谢!

--S

4

2 回答 2

3

你的计划应该奏效。
正如查尔斯所说,热备用是另一种可能的解决方案。它从 8.2 开始受支持,并且对主服务器的性能影响相对较低。热备记录在手册中:PostgreSQL 8.4 热备

配置备用服务器的简短过程如下。有关每个步骤的完整详细信息,请参阅前面提到的部分。

  1. 尽可能地设置主系统和备用系统,包括两个相同版本的 PostgreSQL 副本。
  2. 设置从主服务器到位于备用服务器目录中的 WAL 归档的连续归档。确保在主节点上正确设置了 archive_mode、archive_command 和 archive_timeout(参见第 24.3.1 节)。
  3. 对主服务器进行基本备份(参见第 24.3.2 节),并将此数据加载到备用服务器上。
  4. 从本地 WAL 存档开始在备用服务器上恢复,使用 recovery.conf 指定一个 restore_command 等待如前所述(见第 24.3.3 节)。

要仅实现夜间同步,您的 archive_command 应该在白天以非零退出状态退出。

附加信息:

Postgres Wiki 关于暖待机

博文 热备设置

于 2011-01-28T08:02:05.973 回答
3

9.0 的内置 WAL 流复制旨在完成一些应该满足您的目标的任务——可以接受只读查询的热备用或热备用。您是否考虑过使用它,还是暂时停留在 8.4 上?

(此外,即将发布的 9.1 版本预计将包括pg_basebackup的更新/重写版本,这是一个为新从属创建初始备份点的工具。)


更新:PostgreSQL 9.1 将包括通过在 slave 上的简单函数调用来暂停和恢复流复制的能力

于 2011-01-28T06:55:09.827 回答