Amazon RDS 常见问题解答指出,由我的应用程序来将流量分配到只读副本。
我的网站主要有访客 - 未登录的用户。因此,我认为大多数数据库活动都是读取的。我应该将 MySQL 数据库连接设置为未登录用户的只读副本,并将登录用户的源 RDS 实例设置为只读副本吗?
我的单个 RDS 实例(为多个网站提供支持)刚刚出现瓶颈,所以我有点惊慌,不知道现在从哪里开始。
如果我走的方向不正确,请告诉我正确的路径
答案1
这完全取决于您的应用程序是什么以及它们如何连接数据库并运行查询。
我见过的大多数应用程序都设置了两个数据库连接池/字符串。一个用于读取,一个用于写入,应用程序代码将其查询定向到适合查询的任何池。大多数应用程序在需要故障转移之前都不会这样编写,因此这可能需要一些编码。
您可以使用mysql-代理将特定查询过滤到只读后端。
如果您的负载配置文件允许,通过为每个应用程序运行单独的数据库实例而不是通过读取来分割负载,您可能还会获得更直接的收益。
答案2
您可以使用路由 53 将流量分发到您的只读副本。基本上,您在 vpc 中创建一个域名,并配置路由 53 以将对该域的请求转发到您放置在其后面的 N 个副本。下面的链接有一个设置过程的视频演示,只需几秒钟即可完成设置。
https://aws.amazon.com/premiumsupport/knowledge-center/requests-rds-read-replicas/
然后在您的数据库连接 URL 中使用路由 53 域名。
答案3
多可用区 != 只读副本,两个不同的东西。多可用区创建了一个“不可见”备用,仅在故障转移/维护期间使用,即可用性。只读副本纯粹是为了负载/性能。
答案4
我认为您无法指定读取或写入操作的流量将流向何处。这是使用 RDS 时需要做的权衡。
但是对于负载问题,我认为您应该在 RDS 中启用(我相信您已经这样做了)多可用区复制。
这将创建只读副本,也将用于故障转移和冗余目的。
此外,如果您的流量仍然受到影响,您应该考虑使用预配置 IOPS。这将大大提高数据库的效率和性能。