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.php
sebagai 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?
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
Master / Master (Ketersediaan tinggi)
Master / Master / Budak (Ketersediaan tinggi / Kinerja tinggi)
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.
sumber