我有一个在亚洲的PostgreSQL设置的RDS,并希望有一个在美国的阅读副本。
但不幸的是,从官方网站上发现,只有用于MySQL的RDS具有跨区域副本,而没有用于PostgreSQL的RDS。
我看到this page为PostgreSQL引入了其他方法来将数据迁移到RDS和从RDS中迁移出来。
如果不是自己在美国买EC2安装PostgreSQL,有没有办法把亚洲RDS的数据同步到美国的RDS?
发布于 2015-09-09 20:30:03
这完全取决于复制的目的。是为了提供本地数据源并避免网络延迟吗?
假设您的目标是跨区域复制,您有几个选择。
自定义EC2实例
您可以创建自己的EC2实例并安装PostgreSQL,以便自定义复制行为。
我在我的博客http://thedulinreport.com/2015/01/31/configuring-master-slave-replication-with-postgresql/上记录了如何使用PostgreSQL配置主从复制
当然,您失去了AWS RDS的一些好处,即自动多可用区冗余等,现在突然之间,您必须负责维护您的配置。这远远不是完美的。
两阶段提交
另一种选择是将复制构建到应用程序中。一种方法是使用可以做到这一点的数据库驱动程序,或者使用您自己的两阶段提交。如果您使用的是Java,这里描述了一些想法:JDBC - Connect Multiple Databases
使用SQS解除数据库写操作的耦合
好的,所以这是我个人更喜欢的。对于所有的数据库写操作,都应该使用SQS,并让后台写入器进程从队列中取出消息。
你需要有一个作家在亚洲和一个作家在美国地区。要跨区域在SQS上发布消息,您可以利用将消息发布到多个队列的SNS配置:http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
当然,与两阶段提交不同的是,这种方法会受到bug的影响,而且您的美国数据库也有可能不同步。您将需要实现一个协调过程--例如,一个简单的过程可以是每周从亚洲和pg_restore到美国的pg_dump,以便重新同步它。另一种方法可以做类似Cassandra读取-修复的事情:每10次从美国数据库读取,启动一个后台进程,对亚洲数据库运行相同的查询,如果它们返回不同的结果,您可以启动一个进程来重放一些消息。
实际上,这种方法很常见,我在华尔街也看到过这种方法。
因此,选择您的战斗:要么创建自己的EC2实例并获得配置和开发操作的所有权(讨厌),要么实现保证一致性的两阶段提交,要么放松一致性要求并使用SQS和异步编写器。
发布于 2016-09-16 02:09:01
这是now directly supported by RDS。
使用CLI创建跨区域复制副本的示例:
aws rds create-db-instance-read-replica \
--db-instance-identifier DBInstanceIdentifier \
--region us-west-2 \
--source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:my-postgres-instancehttps://stackoverflow.com/questions/32477255
复制相似问题