如何在Rails中设置分布式数据库
问题描述:
我正在寻找一种实现故障转移的方法,并在我的Rails应用程序中对三个数据库进行了另外的负载平衡。如何在Rails中设置分布式数据库
下面的代码当前没有问题,但是如果db_1
关闭,那么我的应用程序就会死亡。
我想用db_1
作为主,另外两个db_2
和db_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
答
这应该在MySQL端处理。 MySQL有几个选项,比如主动 - 被动(复制),主从,群集或分片。在谷歌上使用这些关键字来查找官方的MySQL文档。每种策略都有各自的优点和缺点,您需要在做出决定之前了解它们。
答
的MySQL已经有一个工具做自动故障转移,并且它恰当地命名mysqlfailover
此实用程序允许用户执行上由 主及其奴隶的复制拓扑复制健康监测 和自动故障转移。该实用程序旨在交互式运行或定期不断刷新健康信息。 其主要任务是监视主站是否发生故障以及何时发生故障,执行故障切换到可用的最佳从站。 实用程序接受一个被视为候选从站的从站列表。
当然,这意味着你需要设置mysql的复制,但你的问题的语气来判断,你似乎已经这样做了。
mysqlfailover不是唯一的选择。 Percona,与mysql完全兼容但独立开发的数据库有自己的功能:
https://www.percona.com/doc/percona-xtradb-cluster/5.5/manual/failover.html