2016-07-07 25 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

相关问题