1

マスター/複数のスレーブを持つシステムがあります。

現在、すべてがマスターで行われ、スレーブはバックアップのためにここにいます。

開発プラットフォームとして Codeigniter を使用しています。

ここで、読み取りクエリにはスレーブを使用し、書き込みクエリにはマスターを使用することにしました。

プロキシはクエリのタイプを認識できないため、ソース コードを変更しないとこれを実行できないと言われました。

完全に機能するシステムに大きな損害を与えずにこれを進める方法についてのアイデア...

4

3 に答える 3

1

CI を介して別の解決策を見つけ、database.php ファイルに 2 つのデータベース接続を作成し、mysql サーバーをデフォルトのデータベース接続として保存し、他の接続を書き込み専用サーバーに保存します。

この基本モデルの拡張を使用できます

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

このモデルを使用してモデルを拡張する必要があり、これを使用してモデルを拡張する必要があります。挿入、更新、削除、取得クエリの前後のコールバックの機能があります。カスタム メソッドまたはコールバック change_db_group を 1 つ追加するだけです。

//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 に答える
1

私も探していたもの、数か月前に私はこのようなことをしましたが、マスタースレーブmysqlサーバーを備えた3つのWebサーバーを追加しました。最初のWebサーバーはmod_proxyでリクエストをリダイレクトして読み取りおよび書き込みサーバーにリダイレクトし、すべてのリクエストはこのサーバーに送信されます。 put または delete リクエストがサーバーに送られ、それは書き込みサーバーに送られ、すべての get または通常のリクエストは読み取りサーバーに送られます

ここで、私が使用した mod_proxy 設定を見つけることができます

http://pastebin.com/a30BRHFq

ここで負荷分散について読むことができます http://www.rackspace.com/knowledge_center/article/simple-load-balancing-with-apache

ハードウェアの関与が少ない、より良いソリューションをまだ探しています

于 2015-02-12T10:04:34.937 に答える