许多关于只读副本的RDS文档包含了一个神奇的步骤,沿着“直接到新主机的数据库stream量”的方向发展。 例如,他们关于实施故障恢复的指示说:
如果出现故障,您将按以下步骤操作:
- 宣传只读副本。
- 将数据库stream量直接传递给新主数据库
- 创build一个替代的只读副本。
他们的指示, 做一个最小的停机时间MySQL版本升级结束…
- 使您的MySQL 5.6只读副本成为主数据库实例。
…
- AWS Route53 CloudFormation模板 – 如何设置默认的GeoLocation?
- AWS站点到站点VPN – 相同的范围
- 网站不能从我的networking到达
- 当负载均衡器没有正常的实例时触发AWS自动扩展
- AWS Glacier与Vault Lock进行备份,但在极端情况下仍然可以移除
- 你现在有一个MySQL数据库的升级版本。 此时,您可以将您的应用程序指向新的MySQL 5.6数据库实例
不过,这个关于将stream量掩盖在实际上是一个复杂的步骤的讨论。 如果我使用EC2实例来托pipe我的数据库,我可以给他们弹性IP,使用实例的公有DNS地址来解决它( 从AWS内部parsing到它的私有IP ),然后立即交换我的整个堆栈到通过重新分配弹性IP(因此同时重新分配公有DNS)来读取副本。 在RDS被认为直接低于许多DBA在EC2上自己的数据库实例的时候,我开始使用这种方法。 但是,RDS实例仍然不能使用弹性IP,所以我不能使用这个特殊技巧在使用RDS时将所有数据库stream量魔术般地redirect到新的实例。
我该怎么做呢? AWS是否希望我简单地将configuration更改部署到接触数据库的堆栈中的每个框?
我不会推荐在我的应用程序configuration中使用RDS DNS域
*.rds.amazonaws.com
改为在Route53中设置专用DNS区域。 这只在你的VPC中可用,所以你不需要公开注册或者类似的东西。
然后,为您的数据库实例设置指向RDS域的CNAMElogging。 设置非常低的TTL(<30s)。
然后,将您的应用程序configuration为使用CNAMElogging。
如果您需要将stream量redirect到新的RDS实例,只需更新CNAMElogging即可。
另外,如果预算允许,您可能要考虑在RDS内使用多可用区。 您将支付两倍的费用,但在计划和非计划故障转移情况下非常方便。