2016-07-07 7 views
0

私は、Railsアプリケーションの3つのデータベースでフェイルオーバーと負荷分散を実現する方法を検討しています。Railsで分散データベースを設定する方法

現在のコードは問題なく動作しますが、db_1がダウンするとアプリケーションが終了します。

db_1をプライマリとし、他の2つのdb_2db_3をフェールオーバーとして使用したいと思います。

また、これらの負荷を分散したいと考えていますが、あまり重要ではありません。

のconfig/database.ymlを

db_1: 
    adapter: mysql2 
    reconnect: false 
    pool: 5 
    username: <username> 
    password: <password> 
    database: database_test 
    host: 101.101.101.1 

db_2: 
    adapter: mysql2 
    reconnect: false 
    pool: 5 
    username: <username> 
    password: <password> 
    database: database_test 
    host: 101.101.101.2 

db_3: 
    adapter: mysql2 
    reconnect: false 
    pool: 5 
    username: <username> 
    password: <password> 
    database: database_test 
    host: 101.101.101.3 

APP /モデル/ ext_databases.rb

class ExtDatabases < ActiveRecord::Base 
     self.abstract_class = true 
     establish_connection :db_1 
end 

APP /モデル/ users.rb

class Users < ExtDatabases 
     Users.table_name = "ext_users" 
end 

答えて

1

これはMySQL側で処理する必要があります。あなたはアクティブパッシブ(レプリケーション)、マスタースレーブ、クラスタ、シャーディングのようなMySQLのオプションをいくつか持っています。正式なMySQLのドキュメントを見つけるには、Googleのキーワードを使用してください。それぞれの戦略には長所と短所があり、決定の前にそれらを理解する必要があります。

1

MySQLがすでに自動フェイルオーバーを行うためのツールを持って、それが適切mysqlfailover

このユーティリティは マスターとスレーブからなるレプリケーショントポロジでレプリケーションのヘルスモニタリング と自動フェイルオーバーを実行することをユーザーに許可するという名前です。このユーティリティは、インタラクティブに実行するように設計されています。または、定期的な間隔で健康情報を継続的に更新することも可能です( )。 主な目的は、マスタの障害を監視し、 の障害が発生した場合に、使用可能な最良のスレーブにフェールオーバーを実行することです。 ユーティリティは、候補のスレーブと見なされるスレーブのリストを受け入れます。

もちろん、それはあなたがすでにそうしているようにあなたの質問の色調で判断して、mysqlの複製を設定する必要があることを意味します。

mysqlfailoverだけではありません。 Perconaは、mysqlと完全に互換性があるが独立して開発されたデータベースは独自のものを持っています:

https://www.percona.com/doc/percona-xtradb-cluster/5.5/manual/failover.html

関連する問題