从AWS RDS PostgreSQL实例中获取WAL文件。

我们在亚马逊网络服务上有一个Postgres RDS实例。我们已经启用了自动备份,并且每天进行快照。我们希望生成一个本地的“最新”RDS实例备份,以便我们自己管理。对实例运行pg_dump是不够的,因为我们希望能够将数据库恢复到任意时间点。我们更倾向于拥有RDS的本地备份和自备份之后的所有WAL文件。问题如下: 1. RDS自动备份程序生成的WAL文件和备份文件是否可以访问?这将是理想的情况。我希望能够下载它们的本地副本。经过初步调查,我觉得答案可能是否定的。听起来RDS将其WAL文件和备份存储在S3中,但我们无法访问它们。我希望能够确认一下。 2. 是否有其他方法可以访问RDS实例上发生的事务(WAL文件)?我想我们应该能够在EC2上创建一个Postgres数据库,并将主要的“实时”RDS实例的事务“传送”到这个EC2实例中。一旦我们的EC2实例更新了,我们就可以从那里获取WAL文件。不过这会带来很多麻烦:/ 这种设置是否可行?如何实现从RDS实例向EC2实例的“传送”,以保持实时更新? 谢谢!
3个回答

更新:我已经在AWS论坛上发布了此事 - 请去那里加入并要求支持
目前为止,Amazon RDS并不支持RDS之外的物理复制。您可以使用"rds_superuser"登录授予用户"REPLICATION"权限,但无法在"pg_hba.conf"中配置用于外部IP的"replication"条目。 此外,在RDS中创建DB参数组时,会显示一些关键参数,但这些参数是锁定状态的,比如"archive_command"被锁定为"/etc/rds/dbbin/pgscripts/rds_wal_archive %p"。AWS RDS for PostgreSQL似乎没有将这些WAL日志暴露给外部访问(比如通过S3),而如果要使用WAL-shipping复制进行外部PITR,它需要这样做。 因此,如果想要使用wal-shipping,请不要使用RDS。它是一个预先配置好的易于使用的数据库,但易于使用往往意味着也有一些限制,在这里就是如此。正如Joe Love在评论中指出的那样,它提供了RDS内的WAL-shipping和PITR,但无法从RDS外部访问WAL日志。 所以你需要使用RDS自己的备份工具 - dumps、快照和基于WAL的PITR。
即使RDS允许您建立复制连接(用于pg_basebackup或流复制),并且允许您访问归档的WAL,您可能无法实际使用该WAL。RDS运行的是经过修补的PostgreSQL,尽管没有人知道修补程度如何,或者它是否显著改变了磁盘上的格式。它还运行在亚马逊选择的架构上,可能是x64 Linux,但很难确定。由于PostgreSQL的磁盘格式和复制依赖于架构,您只能将复制到与Amazon RDS使用的架构相同的主机,并且只有在您的PostgreSQL构建与其兼容的情况下才能进行复制。 除此之外,这意味着您没有任何简单的方法可以迁出RDS。您必须停止对数据库的所有写入足够长的时间以进行pg_dump,然后恢复它并启动新的数据库。通常的复制、故障转移和rsync等技巧都不起作用,因为您无法直接访问DB主机。 即使RDS运行了未打补丁的PostgreSQL,亚马逊可能也不会允许您通过WAL流式传输到RDS或使用pg_basebackup导入到RDS,出于安全原因。PostgreSQL将数据目录视为可信内容,如果您编写了任何聪明的'LANGUAGE c'函数来挂钩内部功能或进行其他任何诡计,您可能能够利用服务器获得比您应该拥有的更大访问权限。因此,亚马逊不会很快允许入站WAL。 他们可以支持出站WAL发送,但上述与格式兼容性、自由更改等问题仍然存在。
你应该使用像Londiste或Bucardo这样的工具。

如果RDS不支持PITR,那么所谓的“恢复到特定时间点”按钮有什么用途? - Joe Love
1RDS在其内部支持PITR。你不能将WAL从RDS中传输到外部。我会进行编辑,以使回答更清晰,因为我可以理解你可能会误读为RDS根本没有PITR支持。 - Craig Ringer


1非常感谢!我经常发现“官方”文档在亚马逊的文档中被埋得很深,以至于我只能通过像你这样的答案找到所需的信息。 - emmdee


1这很方便,但并不是我们在这里讨论的同一件事。他们正在为RDS添加对基于触发器的逻辑复制(如Bucardo和Londiste)的支持。这 添加对“物理”基于日志的流式传输的支持,这是热备份、pg_basebackup等所使用的方式。由于安全问题,他们做出了最佳选择,无法真正支持物理复制。 - Craig Ringer
啊哈,是的。还有感谢你的编辑。我是从另一个更一般性地询问复制选项的问题中得到这个问题的 - 我应该注意到这个问题特别询问关于WAL文件的。 - michel-slm
请同时添加一个相关问题的链接。这样会更有用。 - Craig Ringer
请看这里 - 我也会在那里发布我的答案: http://stackoverflow.com/questions/20468230/postgresql-replication-to-amazon-rds - michel-slm