2016-07-07 32 views
0

我正在尋找一種實現故障轉移的方法,並在我的Rails應用程序中對三個數據庫進行了另外的負載平衡。如何在Rails中設置分佈式數據庫

下面的代碼當前沒有問題,但是如果db_1關閉,那麼我的應用程序就會死亡。

我想用db_1作爲主,另外兩個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 

應用程序/模型/ ext_databases.rb

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

應用程序/模型/ users.rb的

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

回答

1

這應該在MySQL端處理。 MySQL有幾個選項,比如主動 - 被動(複製),主從,羣集或分片。在谷歌上使用這些關鍵字來查找官方的MySQL文檔。每種策略都有各自的優點和缺點,您需要在做出決定之前瞭解它們。

1

的MySQL已經有一個工具做自動故障轉移,並且它恰當地命名mysqlfailover

此實用程序允許用戶執行上由 主及其奴隸的複製拓撲復制健康監測 和自動故障轉移。該實用程序旨在交互式運行或定期不斷刷新健康信息。 其主要任務是監視主站是否發生故障以及何時發生故障,執行故障切換到可用的最佳從站。 實用程序接受一個被視爲候選從站的從站列表。

當然,這意味着你需要設置mysql的複製,但你的問題的語氣來判斷,你似乎已經這樣做了。

mysqlfailover不是唯一的選擇。 Percona,與mysql完全兼容但獨立開發的數據庫有自己的功能:

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

相關問題