5

Rails 4.0.2を開発したこの偉大な宝石Octopusをテストしています。Rails Octopus Gem - スレーブがダウンしているときのマスターとスレーブのレプリケーションの接続動作

(config>のshards.yml)を次のように私はスレーブDBと構成されたタコを作成

octopus: 
    environments: 
    - development 
    replicated: true 
    fully_replicated: true 
    verify_connection: true 
    development: 
    slave1: 
     host: 192.168.1.12 
     adapter: mysql2 
     username: slave_reader 
     password: my_password 
     database: my_server_development 
     reconnect: true 

それはスレーブからマスタに読み書き、非常に素晴らしい作品、しかし私の奴隷場合サーバーは、私はそれがマスターDBにリダイレクトして、コンテンツを取得することを期待する、ダウンしているが、いくつかの時間がしようとした後、それはエラースロー:

Can't connect to MySQL server on '192.168.1.12' (113)

私がもしデシベル私のマスターのためのタコの外観を作るために何ができるかをスレーブサーバはシャットダウンしていますか?

ありがとうございます!

+1

私はOctopusについてはわかりませんが、Makaraはスレーブフェイルオーバーを持っています。https://github.com/taskrabbit/makara –

+0

@Mauricio - ここで私の質問に答えることはできますかhttp://stackoverflow.com/questions/29445495/rails-マスター・スレーブ・データベースを経由したスプリット・ライト・リード・クエリ?noredirect = 1#comment47064893_29445495 –

答えて

2

Octopusのデフォルトの動作は、すべてのデータをマスタに書き込み、スレーブからすべてのデータを読み取ることです(マスターに書き込まれたデータは複製されているためです)。すべての接続されたスレーブに)。複数のスレーブ環境での読み取りは、ラウンドロビンを使用して行われるため、デフォルトでは常にスレーブからデータが取得されます。

また、フォールバックメカニズムとして、スレーブノードが利用できない場合やスレーブにデータが完全に複製されていない場合は、マスターから直接データを読み取る必要があります(.using(:master)を使用)。また、データベースノードからの繰り返しの読み取りを防ぐために、変更/結果をアプリケーションにキャッシュするオプションもあります。

+0

結論として、これは自動的にこれを行うための設定ではありませんか?このスレーブ・フェイルオーバー機能を使用している代替宝石はありますか? –

+2

私はまだそれを使用していませんが、[Seamless Database Pooling](https://github.com/wbharding/seamless_database_pool)というSDPは、まさにあなたが探しているものであるようです。 [このブログの記事](http://www.williambharding.com/blog/rails/rails-3-slave-database-options-there-are-two/)ではOctopusとSDPを比較し、最終結果としてOctopusのフェールオーバー機能が不足しているためにSDPが作成されました。私の答えを受け入れてくれてありがとう! – SaschaM78

関連する問題