2016-07-07 1 views
0

Я рассматриваю способ достижения неудачной и дополнительной балансировки нагрузки по трем базам данных в приложении Rails.Как настроить распределенные базы данных в Rails

Следующий код в настоящее время работает без проблем, однако если db_1 не работает, мое приложение умирает.

Я хотел бы использовать db_1 как первичный, так и другой два db_2 и db_3 как отказ.

Кроме того, я хотел бы загрузить баланс, но это менее важное требование.

конфигурации/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, таких как активный пассивный (репликация), мастер-ведомый, кластер или осколки. Используйте эти ключевые слова в Google, чтобы найти официальную документацию MySQL. Каждая стратегия имеет свои преимущества и недостатки, и вам нужно понять их до принятия решения.

1

MySQL уже есть инструмент, чтобы сделать автоматическое переключение, и это метко назвал mysqlfailover

Эта утилита позволяет пользователям выполнять мониторинг работоспособности репликации и автоматическое переключение на топологии репликации, состоящей из хозяина и его рабов , Утилита предназначена для интерактивного запуска или , постоянно обновляющего информацию о здоровье через определенные промежутки времени. Основная задача состоит в том, чтобы контролировать мастер для отказа и когда происходит сбой , выполнить переключение на лучший доступный ведомый. Утилита принимает список подчиненных устройств, которые считаются подчиненными кандидатами.

Конечно, это означает, что вам нужно настроить репликацию mysql, но судя по тону вашего вопроса, вы, похоже, уже сделали это.

mysqlfailover - не единственный вариант. Percona, база данных, полностью совместимая с mysql, но независимо разработанная, имеет свою собственную ценность:

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

 Смежные вопросы

  • Нет связанных вопросов^_^