Друпальський майстер / тиражування рабів


10

Я встановив два сервери 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 stop) - коли я роблю, що мій сайт запускає:

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).

Яка хитрість зробити цю роботу?

Відповіді:


6

Стосовно Master / Master (Висока доступність) можна виконати балансування навантаження, коли жоден майстер не працює.

У наступному випадку всі записи перейдуть до master1, а всі записи - до master2. Якщо master1 не вдається, всі запити перейдуть до master2. Якщо master2 не вдається, всі запити перейдуть до master1.

'master' => array('master1', 'master2')
'slave' => array('master2', 'master1')

У наступному випадку всі запити перейдуть до master1. Якщо master1 не вдається, усі запити перейдуть до master2:

'master' => array('master1', 'master2')
'slave' => array('master1', 'master2')

Дякую за цю відповідь. Я розумію, це досить старе і може бути застарілим. Чи є якісь поради щодо їх застосування в останній версії Drupal?
Gaurav

4

На користь інших - якнайкраще, як мені вдалося знайти - з коробки Drupal 7, схоже, немає вбудованої можливості високої доступності в базі даних.

Ви можете налаштувати два сервери mysql в конфігурації master / slave, але найкраще це зробити - це надіслати всі записи майстру і всі зчитуватися на підлеглий. Це забезпечує розподіл сирого навантаження, але не відмову.

Тобто, якщо майстер-сервер mysql знизиться, всі ставки будуть вимкнені - на веб-сайті виходить з некрасивим повідомленням про помилку, нарікаючи, що PHP не може дійти до основної бази даних.

Як я розумію, традиційно, як вирішити це за допомогою іншого програмного забезпечення, це або використовувати кластери mysql ndb, або проксі-сервер mysql - але, прочитавши трохи - ці технології, мабуть, не грають добре з Drupal.

Однак я натрапив на модуль Drupal під назвою auto-slave ( http://drupal.org/project/autoslave ). Він не використовується широко (існує 12 сайтів, які активно використовують його за статистикою), але він, здається, не може робити те, що ми хочемо. Його можна налаштувати різними способами:

Майстер / раб

Writes go to Master
Reads go to Slave

Drawbacks:
If master is down, the durpal site displays a prominent message that the site is in "read only" mode.

Майстер / майстер (висока доступність)

Read and Writes go to master1 (primary) unless its unavailable.
If master1 is unavailable, reads and writes go to master2 (secondary)

Drawbacks:
There is no load distribution. All load (reads and writes) go to either master1 or to master2

Master / Master / Slave (висока доступність / висока продуктивність)

Writes go to Master1 (primary) unless its down then they go to Master2
Reads go to the slave unless its down
Drawbacks:
Requires a minimum of three database servers (master/master/slave)

Поки ми встановили перший (Master / Slave) успішно. Я буду намагатися налаштувати Master / Master / Slave далі.

Сподіваємось, це допомагає комусь іншому.


Це дуже допомогло. :)
esafwan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.