Drupal 7 MySQL master / slave репликация не работает


У меня возникли проблемы с получением Drupal 7.7 для использования подчиненной базы данных MySQL.

Мои настройки.php выглядит следующим образом:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'my_db',
  'username' => 'dbuser',
  'password' => 'dbpw',
  'host' => 'db-ip-address'
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'my_db',
  'username' => 'dbuser',
  'password' => 'dbpw',
  'host' => '127.0.0.1'
);

Сама репликация работает отлично. Когда я добавляю новый контент на сайт, он быстро реплицируется на ведомом устройстве.

Однако, глядя на tcpdump, я никогда не вижу вызова локальной базы данных.

Есть ли что-то, что я упускаю, чтобы позволить Drupal использовать slave?

3 4

3 ответа:

Использование ведомых баз данных практически не реализовано в ядре Drupal. Если вы разрабатываете свои собственные модули, то вызовы db_query должны указать, что они хотят использовать подчиненную базу данных, используя массив $options. Смотрите DatabaseConnection::defaultOptions, Как установить этот массив.

Этот вопрос имеет действительно хороший ответ на этот же вопрос: https://drupal.stackexchange.com/questions/10806/how-to-get-core-to-leverage-a-mysql-master-slave-configuration

Действительно можно довольно легко сделать большую часть ядра и contrib использовать ведомый сервер для выбора, не исправляя ядро:)

МодульAutoSlave перенаправляет запросы SELECT в базы данных репликантов, доступные только для чтения, и еще он учитывает задержку репликации.

Согласно документации модуля, он использует репликант только для чтения, когда выполняются все следующие условия:

  1. запрос является запросом select
  2. таблицы в запросе select не были записаны во время запроса и в пределах предполагаемой задержки репликации
  3. транзакция не было начато
  4. таблицы в запросе select не указаны в параметре "таблицы" в настройках драйвера
  5. блокировка не запущена (поддерживается core db-lock и memcache-lock)