我正在使用亚马逊的RDS。我有一个数据库,我们的流量相当大。我已经在没有任何问题的情况下扩展了我们的EC2实例,它一直运行良好,但我希望通过创建来放松数据库负载:
1 - 写数据库
2 - 阅读数据库
显然,我必须在我的脚本中进行多个连接,从一个读取并写入一个很容易,但是负载平衡多个读取数据库的逻辑是什么?
亚马逊有什么东西我可以设置这样做吗?像EC2的负载平衡?或者这是我必须在我的脚本中自动设置的吗?
从技术上讲,我此时可能不需要2个读取数据库实例,但这肯定是常见的,对吧?我认为这需要做,我对这个架构感到好奇。
答案 0 :(得分:2)
不幸的是,没有简单的方法可以做到这一点。由于RDS的自动化管理特性,您将受到亚马逊及其提供的服务的支配。你有几个选择。
这通过route53实现最简单。您可以通过为每个只读副本端点创建多个CNAME记录来完成此操作。例如db.mydomain.com - > somename.23ui23asdad4r.region.rds.amazonaws.com 确保打开加权路由策略并将权重和“设置ID”设置为相同。 冲洗并重复每个只读复制品。
警告1:这不是真正的负载均衡器。这只是滚动一个骰子并将每个请求指向您的一个RDS
警告2:无法对您的RDS实例进行运行状况检查,也无法自动扩展实例。除非你使用云监视触发器脚本做一些疯狂的事情来手动添加和删除RDS只读副本并更新route53。
您可以尝试的一种非常便宜且令人讨厌的方法是为CodeIgniter中的每个只读副本创建一个配置,当您连接到数据库时,您可以随机选择一个。
警告:与上述相同,但更糟糕的是,每次添加或删除只读副本时都需要更新codeigniter配置。
您将数据库移动到EC2实例。这可能是最困难的解决方案,因为您需要管理所有数据库调整和自我调整。从好的方面来说,您可以将它们放在自动缩放组中,并放在VPC中的内部负载均衡器后面
答案 1 :(得分:0)
RDS群集为您提供了两个读和写端点。如果您在读取终端节点上发送读取流量,则AWS将管理所有只读副本的负载平衡。您还可以为只读副本应用扩展策略。
这些选项可用于AWS Aurora clusters。