マスター/複数のスレーブを持つシステムがあります。
現在、すべてがマスターで行われ、スレーブはバックアップのためにここにいます。
開発プラットフォームとして Codeigniter を使用しています。
ここで、読み取りクエリにはスレーブを使用し、書き込みクエリにはマスターを使用することにしました。
プロキシはクエリのタイプを認識できないため、ソース コードを変更しないとこれを実行できないと言われました。
完全に機能するシステムに大きな損害を与えずにこれを進める方法についてのアイデア...
マスター/複数のスレーブを持つシステムがあります。
現在、すべてがマスターで行われ、スレーブはバックアップのためにここにいます。
開発プラットフォームとして Codeigniter を使用しています。
ここで、読み取りクエリにはスレーブを使用し、書き込みクエリにはマスターを使用することにしました。
プロキシはクエリのタイプを認識できないため、ソース コードを変更しないとこれを実行できないと言われました。
完全に機能するシステムに大きな損害を与えずにこれを進める方法についてのアイデア...
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');
}
挿入、更新、または削除クエリを実行する前に、データベース接続が変更されます
私も探していたもの、数か月前に私はこのようなことをしましたが、マスタースレーブmysqlサーバーを備えた3つのWebサーバーを追加しました。最初のWebサーバーはmod_proxyでリクエストをリダイレクトして読み取りおよび書き込みサーバーにリダイレクトし、すべてのリクエストはこのサーバーに送信されます。 put または delete リクエストがサーバーに送られ、それは書き込みサーバーに送られ、すべての get または通常のリクエストは読み取りサーバーに送られます
ここで、私が使用した mod_proxy 設定を見つけることができます
ここで負荷分散について読むことができます http://www.rackspace.com/knowledge_center/article/simple-load-balancing-with-apache
ハードウェアの関与が少ない、より良いソリューションをまだ探しています