Я настроил два сервера MySQL с репликацией Master / Slave для базы данных drupal и подтвердил, что базы данных синхронизируются и реплицируются.
Сейчас я пытаюсь указать drupal на обе базы данных в основном для целей аварийного переключения / резервирования. То есть, если мне нужно перезагрузить наш основной сервер базы данных, я не хочу, чтобы наш сайт закрывался. (Переход только для чтения допустим в сценариях сбоев)
На основании следующей статьи . Я изменил settings.php
следующим образом:
$databases['default']['default'] = array(
'driver' => 'mysql',
'database' => 'sdrupal',
'username' => 'drupal',
'password' => 'topsecret',
'host' => 'masterdb.ptp.local',
);
$databases['default']['slave'][] = array(
'driver' => 'mysql',
'database' => 'sdrupal',
'username' => 'drupal',
'password' => 'topsecret',
'host' => 'slavedb.ptp.local',
);
Конфигурация в порядке, пока я не выключу мастер (остановка службы mysqld) - когда я это делаю, мой сайт рвет:
PDOException: SQLSTATE [HY000] [2013] Потерянное соединение с сервером MySQL при «чтении исходного пакета связи», системная ошибка: 111 в drupal_is_denied () (строка 1895 из /www/includes/bootstrap.inc). дополнительный
PDOException: SQLSTATE [HY000] [2013] Потеряно соединение с сервером MySQL при «чтении начального пакета связи», системная ошибка: 111 в dblog_watchdog () (строка 141 из /www/modules/dblog/dblog.module).
Какой трюк, чтобы заставить это работать?
источник
Для блага других - насколько я смог узнать - из коробки в Drupal 7, похоже, не встроена возможность высокой доступности базы данных.
Вы можете настроить два сервера mysql в конфигурации «ведущий / ведомый», но лучше всего будет отправить все записи на ведущий и все чтения на ведомый. Это обеспечивает грубое распределение нагрузки, но не отказоустойчивость.
То есть, если главный сервер mysql выходит из строя, все ставки выключаются - сайт закрывается с ужасным сообщением об ошибке, сообщающим, что PHP не может добраться до главной базы данных.
Традиционно, как я понимаю, способ решения этой проблемы с другим программным обеспечением состоит в том, чтобы использовать либо кластеры mysql ndb, либо прокси-сервер mysql - но после прочтения немного - эти технологии явно не очень хорошо работают с Drupal.
Однако я наткнулся на модуль Drupal, называемый auto-slave ( http://drupal.org/project/autoslave ). Он не используется широко (есть 12 сайтов, активно использующих его согласно статистике), но, похоже, он может делать то, что мы хотим. Это может быть настроено различными способами:
Master / Slave
Мастер / Мастер (Высокая доступность)
Master / Master / Slave (Высокая доступность / Высокая производительность)
Пока что мы успешно установили первый (Master / Slave). Я собираюсь попытаться настроить Master / Master / Slave дальше.
Надеюсь, это поможет кому-то еще.
источник