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 ответа:
Использование ведомых баз данных практически не реализовано в ядре 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
в базы данных репликантов, доступные только для чтения, и еще он учитывает задержку репликации.Согласно документации модуля, он использует репликант только для чтения, когда выполняются все следующие условия:
- запрос является запросом select
- таблицы в запросе select не были записаны во время запроса и в пределах предполагаемой задержки репликации
- транзакция не было начато
- таблицы в запросе select не указаны в параметре "таблицы" в настройках драйвера
- блокировка не запущена (поддерживается core db-lock и memcache-lock)