似たようなプラグインもいくつかあったけど、どれもしっくり来なかったから自分で作った。
その名も「Mysql Cluster Adapter」。
eth0jp's activerecord-mysql_cluster_adapter at master - GitHub
http://github.com/eth0jp/activerecord-mysql_cluster_adapter
MySQL Cluster Adapterの機能
複数Writableに対応
ただReadOnly機能がないだけだけど。
※マルチマスターレプリケーション対応ではない。
クラスタリング・自動復旧
リクエストが来た時にランダムで使うノードを選択する。
もし選択したノードが死んでいたら再接続を試みて、接続出来なかったら次のノードを選択する。
全てのノードが死んでたら500エラー。
設定ファイル
config/database.yml
production: adapter: mysql_cluster nodes: - database: clusterdb host: 192.168.1.10 username: root password: pass encoding: utf8 - database: clusterdb host: 192.168.1.20 username: root password: pass encoding: utf8 development: adapter: mysql_cluster nodes: - database: clusterdb_dev host: 192.168.1.10 username: root password: pass encoding: utf8 - database: clusterdb_dev host: 192.168.1.20 username: root password: pass encoding: utf8
インストール
./script/plugin install git://github.com/eth0jp/activerecord-mysql_cluster_adapter.git
動作確認バージョン
Ruby 1.8.5
ActiveRecord 2.3.5
参考URL
ActiveRecord
ActiveRecordのDBコネクションの接続切れと再接続について。reconnectオプションは危険だなーとかも - odeの開発メモ日記
http://d.hatena.ne.jp/ode/20100809/1281336400
データベースに接続できない場合の流れを追ってみた - remind::me
http://d.hatena.ne.jp/kenshoster/20090127/1233041004
似たようなプラグイン
acts_as_readonlyable
マスタースレーブ構成を想定したプラグイン。
モデルごとにMaster/Slaveを決める。
class Fruit < ActiveRecord::Base acts_as_readonlyable :read_only end
Revolution On Rails: [PLUGIN RELEASE] ActsAsReadonlyable
http://revolutiononrails.blogspot.com/2007/04/plugin-release-actsasreadonlyable.html
dbのマスタースレーブに対応するためにacts_as_readonlyableを使ってみる - odeの開発メモ日記
http://d.hatena.ne.jp/ode/20090109/1231496360
mysql_replication_adapter
マスタースレーブ構成を想定したプラグイン。
SQLごとにMaster/Slaveを決める。
MyModel.find(:all, :use_slave => true)
Mysql Replication Adapter | Engineering Rapleaf
http://blog.rapleaf.com/dev/2007/08/12/mysql-replication-adapter/
findchris's mysql_replication_adapter at master - GitHub
http://github.com/findchris/mysql_replication_adapter
magic_multi_connections
最近のバージョンのRailsでは動かないみたい。
Magic Multi-Connections
http://magicmodels.rubyforge.org/magic_multi_connections/