Replikasi Master Drupal / Budak

10

Saya telah menyiapkan dua server MySQL dengan replikasi Master / Slave untuk basis data drupal dan saya telah mengkonfirmasi bahwa basis data dalam sinkronisasi dan replikasi.

Saya sekarang mencoba mengarahkan drupal ke kedua database pada dasarnya untuk keperluan failover / redundansi. Itu jika saya perlu me-reboot server database utama kami, saya tidak ingin situs kami turun. (Hanya baca hanya dapat diterima selama skenario kegagalan)

Berdasarkan artikel berikut . Saya telah memodifikasi settings.phpsebagai berikut:

$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',
);

Konfigurasi ini baik-baik saja sampai saya mematikan master (service mysqld stop) - ketika saya melakukan itu situs saya muntah:

PDOException: SQLSTATE [HY000] [2013] Kehilangan koneksi ke server MySQL saat 'membaca paket komunikasi awal', kesalahan sistem: 111 di drupal_is_denied () (baris 1895 dari /www/includes/bootstrap.inc). Tambahan

PDOException: SQLSTATE [HY000] [2013] Kehilangan koneksi ke server MySQL saat 'membaca paket komunikasi awal', kesalahan sistem: 111 pada dblog_watchdog () (baris 141 dari /www/modules/dblog/dblog.module).

Apa trik untuk membuat ini berfungsi?

Brad
sumber

Jawaban:

6

Mengenai Master / Master (Ketersediaan tinggi) dimungkinkan untuk melakukan load-balancing ketika tidak ada master yang down.

Yang berikut ini akan membuat semua tulisan pergi ke master1 dan semua membaca pergi ke master2. Jika master1 gagal, semua permintaan akan masuk ke master2. Jika master2 gagal, semua permintaan akan masuk ke master1.

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

Berikut ini akan membuat semua kueri pergi ke master1. Jika master1 gagal, semua kueri akan masuk ke master2:

'master' => array('master1', 'master2')
'slave' => array('master1', 'master2')
Thomas
sumber
Terima kasih atas jawaban ini. Saya mengerti ini sudah cukup tua dan mungkin sudah ketinggalan zaman. Apakah Anda memiliki tips untuk menerapkan hal yang sama di versi terbaru Drupal?
Gaurav Ojha
4

Untuk kepentingan orang lain - sebaik yang bisa saya temukan - di luar kotak Drupal 7 tampaknya tidak memiliki basis data dengan kemampuan ketersediaan tinggi.

Anda dapat men-setup dua server mysql dalam konfigurasi master / slave tetapi yang terbaik yang akan dilakukan adalah mengirim semua write ke master dan semua membaca ke slave. Itu memberikan distribusi beban kasar tetapi tidak gagal .

Dengan kata lain jika server master mysql turun semua taruhan dimatikan - situs turun dengan pesan kesalahan jelek mengeluh bahwa PHP tidak dapat mencapai database master.

Secara tradisional, seperti yang saya mengerti, cara untuk mengatasi ini dengan perangkat lunak lain adalah dengan menggunakan cluster mysql ndb atau proxy mysql - tetapi setelah membaca sedikit - teknologi ini tampaknya tidak cocok dengan Drupal.

Namun saya menemukan modul Drupal yang disebut auto-slave ( http://drupal.org/project/autoslave ). Ini tidak banyak digunakan (ada 12 situs yang aktif menggunakannya sesuai dengan statistik) tetapi tampaknya dapat melakukan apa yang kita inginkan. Itu dapat dikonfigurasi dengan berbagai cara:

Tuan / Budak

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.

Master / Master (Ketersediaan tinggi)

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 / Budak (Ketersediaan tinggi / Kinerja tinggi)

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)

Sejauh ini kita sudah berhasil mengatur yang pertama (Master / Slave). Saya akan mencoba mengatur Master / Master / Slave berikutnya.

Semoga ini bisa membantu orang lain keluar.

Brad
sumber
Ini memang banyak membantu. :)
esafwan