Drupal Master / Slave Çoğaltma


10

Ben drupal veritabanı için Master / Slave çoğaltma ile iki MySQL sunucusu kurduk ve veritabanlarının senkronize ve çoğaltma olduğunu doğruladım.

Şimdi temelde yük devretme / artıklık amaçları için her iki veritabanına drupal işaret etmeye çalışıyorum. Birincil veritabanı sunucumuzu yeniden başlatmam gerekirse sitemizin çökmesini istemiyorum. (Hata senaryoları sırasında salt okunur olmak kabul edilebilir)

Aşağıdaki makaleye dayanarak . settings.phpAşağıdaki gibi değiştirdim :

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

Ben sitem pukes yaptığımda - Ben ana (hizmet mysqld stop) - kapatma kadar yapılandırma gayet iyi:

PDOException: SQLSTATE [HY000] [2013] 'İlk iletişim paketini okumada' MySQL sunucusuna bağlantı kesildi, sistem hatası: drupal_is_denied () içinde 111 (/www/includes/bootstrap.inc satır 1895). Ek

PDOException: SQLSTATE [HY000] [2013] 'İlk iletişim paketini okumada' MySQL sunucusuna bağlantı kesildi, sistem hatası: dblog_watchdog () içinde 111 (/www/modules/dblog/dblog.module satır 141).

Bu işi yapmanın hilesi nedir?

Yanıtlar:


6

Master / Master ile ilgili (Yüksek kullanılabilirlik), master yokken yük dengeleme yapmak mümkündür.

Aşağıdaki tüm yazma işlemleri master1'e ve tüm okumalar master2'ye geçecektir. Master1 başarısız olursa, tüm sorgular master2'ye gider. Master2 başarısız olursa, tüm sorgular master1'e gider.

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

Aşağıdaki tüm sorguların master1'e gitmesini sağlayacaktır. Master1 başarısız olursa tüm sorgular master2'ye gider:

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

Bu cevap için teşekkürler. Bunun oldukça eski ve modası geçmiş olabileceğini anlıyorum. Aynı şeyi Drupal'ın en son sürümünde uygulamak için ipuçlarınız var mı?
Gaurav Ojha

4

Diğerlerinin yararına - bulabildiğim kadar iyi - kutunun dışında Drupal 7, yerleşik herhangi bir veritabanı yüksek kullanılabilirlik özelliğine sahip görünmüyor.

Bir master / slave yapılandırmasında iki mysql sunucusu kurabilirsiniz, ancak yapılacak en iyi şey tüm yazmaları master'a ve tüm okumaları slave'e göndermektir. Bu ham yük dağıtımı sağlar ancak yük devretme sağlamaz .

Yani ana mysql sunucusu düşerse tüm bahisler kapanır - site PHP'nin ana veritabanına ulaşamadığından şikayet eden çirkin bir hata mesajı ile iner.

Geleneksel olarak, anladığım kadarıyla, bunu diğer yazılımlarla çözmenin yolu mysql ndb kümeleri veya mysql proxy kullanmaktır - ancak biraz okuduktan sonra - bu teknolojiler görünüşe göre Drupal ile iyi oynamıyor.

Ancak ben oto-köle ( http://drupal.org/project/autoslave ) adı verilen bir Drupal modülüne rastladım . Yaygın olarak kullanılmıyor (istatistiklere göre aktif olarak kullanan 12 site var), ancak istediğimizi yapabiliyor gibi görünüyor. Çeşitli şekillerde yapılandırılabilir:

Köle başı

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 (Yüksek kullanılabilirlik)

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 (Yüksek kullanılabilirlik / Yüksek performans)

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)

Şimdiye kadar ilkini (Master / Slave) başarıyla kurduk. Bundan sonra Master / Master / Slave kurulumunu yapmaya çalışacağım.

Umarım bu başka birine yardımcı olur.


Bu çok yardımcı oldu. :)
esafwan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.