У нас есть приложение Rails 3.1.3, которое подключается к MySQL через гем mysql2.Стандартный конфиг.У нас также есть несколько работников Resque, выполняющих фоновые работы.Имя хоста БД, на которое мы указываем (в database.yml), фактически является виртуальным IP-адресом (VIP), который указывает либо на узел 1, либо на узел 2.
За кулисами два сервера (узла) MySQL настроены на высокийКонфигурация доступности.Папки данных реплицируются через DRBD, при этом mysqld работает только на «активном» узле.Когда кластер обнаруживает, что узел 1 недоступен, он запускает mysqld на узле 2 и указывает на него VIP.
Если вам нужны дополнительные сведения о конкретной настройке, это очень похоже на эту кулинарную книгу MySQL HA .
Вот проблема: Когда происходит аварийное переключение, для завершения требуется около 30-60 секунд, в течение которых сервер MySQL недоступен.Любые задания Resque, которые в данный момент выполняются, терпят неудачу.
Вот вопрос (ы): Как мы можем сказать ActiveRecord переподключиться после задержки?Может быть, попытка несколько повторных подключений с таймером отсрочки?Или есть лучший способ справиться с этим?