我的读取密集型应用程序需要水平扩展。它将由使用 Amazon EC2 的各种客户端部署。我最初的想法是,基本设置将使用一个 RDS 实例和一个 EC2 实例。EC2 (c1.medium) 实例将运行 Web 服务器和 RDS 服务器的本地 MySQL 只读副本。该应用程序配置为使用 RDS 服务器进行写入,使用 localhost 进行读取。使用自动扩展组,将根据负载启动更多 c1.medium EC2 实例。每个新的 EC2 实例都将有自己的本地 mysql 复制数据以供读取。
现在的问题是:我可以连接到 RDS 来创建本地读取副本吗?
显而易见的替代方案是使用 RDS API 启动额外的官方读取副本节点,但我不喜欢这样做,因为这样我就需要以 2 台机器而不是 1 台机器为单位进行扩展,而这更昂贵。此外,由于延迟,我更喜欢让 mysql 读取本地查询。
答案1
更新/澄清
虽然我会将链接和引用的 AWS 论坛回复解释为非 RDS 到 RDS 复制两种方式都已经(否则他们可能会提到替代方案),一个相关的问题明确询问使用 RDS 作为复制主服务器截至今天同样未得到解决。
不幸的是,这仍然不支持亚马逊 RDS,请参阅 drcursor 对类似问题的回答是否可以使用 EC2 RDS MySQL 实例作为外部主实例的从实例?:
截至 2011 年 2 月,此功能仍不受支持,RDS 实例作为复制从属:
目前不支持非 RDS 到 RDS 的复制[...]。但是,我们会记录您的兴趣,以便规划未来的路线图。
答案2
为什么不简单地使用 RDS 只读副本来设置较小的实例以执行读取操作,而让主 RDS 进行写入操作?看来您的系统已经开发为可以处理这种情况了。没有简单的方法可以设置 RDS 实例的复制,除非重复执行 mysqldump 然后在本地重新导入。如果您的应用程序在内部进行适当的数据缓存,则它不必对只读副本进行 1:1 的缩放。如果应用程序中的数据缓存太差以至于您必须采用 1:1 的比例,那么我会回去重新调整应用程序或研究使用 memcache(ElastiCache)作为 RDS 读取缓存数据的中间存储。