1

我们有一个系统,我们有一个 Master / Multiple Slaves 。

目前一切都发生在主服务器上,从服务器只是为了备份。

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

现在我们决定使用从属设备进行读取,使用主设备进行写入查询。

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

任何想法如何在不对完美工作系统造成太大损害的情况下进行此操作...

4

3 回答 3

1

我也在寻找的东西,几个月前我做了这样的事情,但我添加了 3 个带有主从 mysql 服务器的 Web 服务器,第一个 Web 服务器启用了 mod_proxy 以重定向请求以读取和写入服务器所有请求都将到达此服务器,如果发布, put 或 delete 请求到达服务器它将去写入服务器,所有获取或正常请求将去读取服务器

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

http://pastebin.com/a30BRHFq

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

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

于 2015-02-12T10:04:34.937 回答
1

通过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');

}

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

于 2015-02-12T11:17:29.393 回答