1

我们计划将我们的Tomcat/MySQL应用程序移动到亚马逊云上,使用 2 个 EC2 实例(inst_1 和 inst_2)在不同的可用区运行,其中 inst_1 将包含主 RDS 数据库,而 inst_2 将包含从 RDS 数据库。

如果我们使用弹性负载平衡来平衡两个实例之间的流量,那么指向 inst_2 的流量(包括insert/update/deletedb 事务)是否会首先更新 inst_1 中的主 RDS db,然后同步更新 inst_2 中的从属;从而确保两个 RDS 实例始终保持同步?

亚马逊发布的信息(白皮书)暗示了这一点,但没有明确说明。如果不是,如何确保两个 RDS 实例保持同步?

附加说明:我们计划使用 Amazon 的 Elastic Beanstalk。谢谢!

4

2 回答 2

2

你必须考虑一些事情

  • AWS RDS 实例是运行 MySQL 服务器的简单托管 EC2 实例。
  • 如果您添加一个从属设备(我认为亚马逊称它们为只读副本),这是一个只读从属设备
  • Amazon 不会自动管理向主服务器分配写入查询。
  • 复制将确保您的读取从属设备始终自动更新(具有最小延迟,随着主设备上的写入负载而增加)
  • 此行为是特定于 MySQL 的

这意味着您必须将操作查询专门委托给主服务器。

这可以由您的应用程序或运行在额外机器上的 MySQL 代理来完成。

然后,代理是您的应用程序服务器将与之通信的唯一接口。它能够管理 RDS 实例之间的平衡以及对主实例的任何操作查询的方向。

于 2012-11-23T08:56:46.997 回答
1

在多可用区模式下使用 RDS 时,您无法访问辅助实例。只有一个实例对您可见,所以如果您的问题不适用,大多数情况下。在故障转移的情况下,您获得的 DNS 地址将开始解析为不同的 IP。亚马逊没有透露这两个实例是如何保持同步的。

如果您使用单 az 实例 + 副本而不是使用多 az 实例,那么您可以适当地指导查询 - 任何更改副本上数据的尝试都将失败。由于这只是标准 MySQL 复制,因此副本可能落后于主副本(特别是在当前版本的 MySQL 中,副本仅运行单个线程)

于 2012-11-23T20:46:24.137 回答