如何为PostgreSQL设置AWS RDS的跨区域副本

Ran*_*ang 6 postgresql replication rds amazon-web-services

我在亚洲有一个用于PostgreSQL设置的RDS,并希望在美国有一个读取副本.

但遗憾的是,从官方网站上发现,只有RDS for MySQL具有跨区域副本但不适用于PostgreSQL.

我看到这个页面介绍了将数据迁移到RDS for PostgreSQL和从RDS迁移出来的其他方法.

如果不是自己在美国购买EC2来安装PostgreSQL,有没有办法将ASIA RDS的数据同步到US RDS?

Ole*_*lin 6

这一切都取决于您的复制目的.是提供本地数据源还是避免网络延迟?

假设您的目标是进行跨区域复制,那么您有两个选择.

自定义EC2实例

您可以创建自己的EC2实例并安装PostgreSQL,以便自定义复制行为.

我已经记录了在我的博客上使用PostgreSQL配置主从复制:http://thedulinreport.com/2015/01/31/configuring-master-slave-replication-with-postgresql/

当然,您失去了AWS RDS的一些好处,即自动多可用区冗余等,现在突然之间您必须负责维护您的配置.这远非完美.

两阶段提交

备用选项是在应用程序中构建复制.一种方法是使用可以执行此操作的数据库驱动程序,或者执行您自己的两阶段提交.如果您使用的是Java,那么这里介绍一些想法:JDBC - 连接多个数据库

使用SQS解除数据库写入的连接

好的,所以这个是我个人喜欢的.对于所有数据库写入,您应该使用SQS并具有将消息从队列中取出的后台编写器进程.

你需要在亚洲有一位作家,在美国地区有一位作家.要跨区域在SQS上发布,您可以利用将消息发布到多个队列的SNS配置:http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html

当然,与两阶段提交不同,此方法存在错误,您的美国数据库可能会失去同步.您需要实施一个对帐过程 - 例如,一个简单的过程可以是来自亚洲的pg_dump和每周进入美国的pg_restore,以重新同步它.另一种方法可以做类似Cassandra读取修复的事情:每10次从美国数据库读取,启动后台进程以对亚洲数据库运行相同的查询,如果它们返回不同的结果,您可以启动进程来重放某些消息.

实际上,这种方法很常见,而且我看过它在华尔街上使用过.


所以,选择你的战斗:要么你创建自己的EC2实例并获得配置和devops(yuck)的所有权,实现两阶段提交以保证一致性,或放宽一致性要求并使用SQS和异步编写器.