MySQL 代理重定向 Read/Write

MySQL proxy redirect Read/Write

我们有一个系统,其中有一个主/多个从。

目前一切都在Master上进行,Slave只是在这里做备份。

我们使用 Codeigniter 作为开发平台。

现在我们决定使用从服务器进行读取,使用主服务器进行写入查询。

有人告诉我,如果不修改源代码,这是不可能的,因为代理无法知道查询的类型。

知道如何在不对完美运行的系统造成太大损害的情况下继续进行此操作吗...

我也在看的东西,几个月前我做了类似的事情但是我添加了 3 个带有主从 mysql 服务器的 Web 服务器,第一个启用了 mod_proxy 的 Web 服务器以重定向读取请求和写服务器所有请求都将到达此服务器,如果 post,放置或删除请求到达服务器它将转到写服务器,所有获取或正常请求将转到读取服务器

在这里您可以找到我使用的 mod_proxy 设置

http://pastebin.com/a30BRHFq

在这里您可以阅读有关负载平衡的内容 http://www.rackspace.com/knowledge_center/article/simple-load-balancing-with-apache

仍在寻找涉及更少硬件的更好解决方案

通过 CI 找到另一个解决方案,在 database.php 文件中创建两个数据库连接,将 mysql 服务器保存为默认数据库连接,其他连接用于只写服务器

你可以使用这个基础模型扩展

https://github.com/jamierumbelow/codeigniter-base-model

你需要用这个模型扩展你的模型并且需要用这个扩展你的模型,它具有插入、更新、删除和获取查询前后的回调功能,只需要添加一个自定义方法或回调change_db_group

//this method in MY_Model    
function change_db_group{
   $this->_database = $this->load->database('writedb', TRUE)
}

没有你的示例模型

class Example_Model extends MY_Model{

  protected $_table = 'example_table';
  protected $before_create = array('change_db_group');
  protected $before_update = array('change_db_group');
  protected $before_delete = array('change_db_group');

}

您的数据库连接将在执行插入、更新或删除查询之前更改

我们将使用这个:http://dev.mysql.com/downloads/mysql-proxy/

它完全符合我们的要求:

更多信息在这里:

http://jan.kneschke.de/2007/8/1/mysql-proxy-learns-r-w-splitting/

http://www.infoq.com/news/2007/10/mysqlproxyrwsplitting

http://archive.oreilly.com/pub/a/databases/2007/07/12/getting-started-with-mysql-proxy.html