提升只读副本后,如何将数据库流量重定向到 RDS 上的新主服务器?

提升只读副本后,如何将数据库流量重定向到 RDS 上的新主服务器?

RDS 中关于只读副本的很多文档都包含一个神奇的步骤,如下所示“将数据库流量引导至新的主服务器。”例如,他们关于实现故障恢复说:

如果发生故障,请按以下步骤操作:

  1. 提升只读副本。
  2. 将数据库流量引导至新的主服务器。
  3. 创建替换的只读副本。

以及他们的指示进行停机时间最少的 MySQL 版本升级以...结束

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

...

  • 您现在拥有升级版的 MySQL 数据库。此时,您可以将应用程序定向到新的 MySQL 5.6 数据库实例

不过,关于引导流量的讨论掩盖了实际上复杂的步骤。如果我使用 EC2 实例来托管我的数据库,我可以为它们提供弹性 IP,使用实例的公共 DNS 地址来寻址它(这从 AWS 内部解析其私有 IP),然后立即通过重新分配弹性 IP(从而同时重新分配公共 DNS)将我的整个堆栈交换为只读副本。我以前很高兴地使用这种方法许多 DBA 认为 RDS 不如在 EC2 上部署自己的数据库实例。但是,RDS 实例仍然不能具有弹性 IP,因此在使用 RDS 时我无法使用这个特殊技巧将所有数据库流量神奇地重定向到新实例。

我该怎么做呢?AWS 是否希望我简单地将配置更改部署到堆栈中接触数据库的每个框?

答案1

我不建议在我的应用程序配置中使用 RDS DNS 域,即

*.rds.amazonaws.com

在 Route53 中设置私有 DNS 区域。这仅在您的 VPC 内可用,因此您无需公开注册或进行类似操作。

然后,为指向 RDS 域的数据库实例设置 CNAME 记录。设置非常低的 TTL(<30 秒)。

然后,配置您的应用以使用 CNAME 记录。

如果您需要将流量重新重定向到新的 RDS 实例,只需更新 CNAME 记录。

此外,如果预算允许,您可能要考虑在 RDS 中使用多可用区。您需要支付两倍的费用,但它在计划内和计划外故障转移情况下都非常方便。

相关内容