php - 在 MySql/PHP/CodeIgniter 上负载平衡多读数据库

标签 php mysql codeigniter amazon-rds

我正在使用亚马逊的 RDS。我只有一个数据库,而且我们的流量相当大。我已经毫无问题地扩展了我们的 EC2 实例,它运行良好,但我想通过创建以下内容来减轻数据库负载:

1 - 写数据库
2 - 读取数据库

显然,我的脚本中必须有多个连接,从一个连接读取和写入一个连接很容易,但是负载平衡多个读取数据库的逻辑是什么?

我可以在 Amazon 中设置一些东西来执行此操作吗?比如 EC2 的负载均衡?或者这是我必须在我的脚本中自动设置的东西吗?

从技术上讲,此时我可能不需要 2 个读取数据库实例,但这肯定是常见的事情,对吧?我认为这需要完成,而且我对架构很好奇。

最佳答案

不幸的是,没有简单的方法可以做到这一点。由于 RDS 的自动管理特性,您将受制于亚马逊及其提供的服务。不过,您有几个选择。

1。您坚持使用 RDS 并设置循环 DNS。

这是通过 route53 最容易实现的。为此,您可以为每个只读副本的端点创建多个 CNAME 记录。例如 db.mydomain.com -> somename.23ui23asdad4r.region.rds.amazonaws.com 确保打开加权路由策略并将权重和“设置 ID”设置为相同。 冲洗并重复每个只读副本。

http://note.io/1agsSMB

警告 1:这不是真正的负载平衡器。这只是掷骰子并将每个请求指向您的一个 RDS

警告 2:无法对您的 RDS 实例进行健康检查,也无法自动缩放实例。除非你用 cloud watch 触发脚本做一些疯狂的事情来手动添加和删除 RDS 只读副本并更新 route53。

2。在您的应用程序中使用掷骰子。

您可以尝试的一种非常便宜且令人讨厌的方法是在 CodeIgniter 中为每个只读副本创建一个配置,当您连接到数据库时,您会随机选择一个。

注意事项:与上述相同,但更糟糕的是,每次添加或删除只读副本时,您都需要更新 codeigniter 配置。

3。花费大量时间将 RDS 移植到 ec2 实例。

您将数据库移动到 EC2 实例。这可能是最困难的解决方案,因为您需要自己管理所有数据库调整和调整。从好的方面来说,您将能够将它们放在一个自动缩放组中,并在您的 VPC 中的内部负载均衡器后面

关于php - 在 MySql/PHP/CodeIgniter 上负载平衡多读数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385305/

相关文章:

php - 将 SQL 结果分组在一起?

javascript - TINYMCE 在点击添加图像后添加输入字段

mysql - 使用 mysql LIKE 在列内搜索多次

mysql - 在两个表的Left Join中,选择左表中的所有记录,并从右表中仅选择与左表匹配的一行记录

CodeIgniter 2.1 的 show_404() 和 404_override 问题

PHP数组效率和内存澄清

php - 我有一列包含逗号分隔值如何使用数组搜索这些值

php - SQL子查询问题

php - mysql insert into if not exists 从单独的表

php - Codeigniter 插入代码不起作用