热备
热备是指在当前执行归档恢复的数据库上运行查询的能力。日志传输复制允许您创建主节点(或主节点)的一个或多个备用节点,这些节点是主节点的副本。备用节点可以用于只读查询访问。
热备由 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 热备文档,而不是依赖此快速入门指南。
您需要尝试热备的最基本的一组说明如下
- 创建主数据库
- 为 WAL 归档配置主服务器
- 创建主服务器的备份
- 启动热备实例
创建主数据库
如果您还没有适合的 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();
查看当前快照,使用