我正在研究一种在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.3app/models/ext_databases.rb
class ExtDatabases < ActiveRecord::Base
self.abstract_class = true
establish_connection :db_1
endapp/models/users.rb
class Users < ExtDatabases
Users.table_name = "ext_users"
end发布于 2016-07-07 15:09:21
应该在MySQL端进行处理。对于MySQL,您有几个选项,如主动-被动(复制)、主从、群集或切分。在google上使用这些关键字查找官方的MySQL文档。每种策略都有各自的优点和缺点,在做出决定之前,你需要了解它们。
发布于 2016-07-13 03:16:50
MySQL已经有了一个自动故障转移工具,它的名字很贴切,名为mysqlfailover
此实用工具允许用户在由主服务器及其从节点组成的复制拓扑上执行复制健康监视和自动故障转移。该实用程序旨在以交互或连续的方式运行,定期刷新健康信息。它的主要任务是监视主服务器的故障,当发生故障时,执行故障转移到可用的最佳从站。该实用程序接受要被视为候选从站的奴隶列表。
当然,这意味着您确实需要设置mysql复制,但从您问题的语气来看,您似乎已经这样做了。
mysqlfailover不是唯一的选择。Percona是一个与mysql完全兼容但独立开发的数据库,它有自己的特点:
https://www.percona.com/doc/percona-xtradb-cluster/5.5/manual/failover.html
https://stackoverflow.com/questions/38240295
复制相似问题