如何在提升读取副本之后将数据库stream量redirect到RDS上的新主数据库?

许多关于只读副本的RDS文档包含了一个神奇的步骤,沿着“直接到新主机的数据库stream量”的方向发展。 例如,他们关于实施故障恢复的指示说:

如果出现故障,您将按以下步骤操作:

  1. 宣传只读副本。
  2. 将数据库stream量直接传递给新主数据库
  3. 创build一个替代的只读副本。

他们的指示, 做一个最小的停机时间MySQL版本升级结束…

  • 使您的MySQL 5.6只读副本成为主数据库实例。

  • 你现在有一个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内使用多可用区。 您将支付两倍的费用,但在计划和非计划故障转移情况下非常方便。