Drupal Replication Master / Slave


10

Ho installato due server MySQL con replica Master / Slave per il database drupal e ho confermato che i database sono sincronizzati e replicati.

Sto ora cercando di indirizzare drupal a entrambi i database essenzialmente per scopi di failover / ridondanza. Cioè se devo riavviare il nostro server di database primario non voglio che il nostro sito vada in crash. (L'andare in sola lettura è accettabile durante gli scenari di errore)

Basato sul seguente articolo . Ho modificato settings.phpcome segue:

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

La configurazione va bene fino a quando non spengo il master (servizio mysqld stop) - quando lo faccio il mio sito funziona:

PDOException: SQLSTATE [HY000] [2013] Connessione persa al server MySQL durante la 'lettura del pacchetto di comunicazione iniziale', errore di sistema: 111 in drupal_is_denied () (riga 1895 di /www/includes/bootstrap.inc). addizionale

PDOException: SQLSTATE [HY000] [2013] Connessione persa al server MySQL durante la 'lettura del pacchetto di comunicazione iniziale', errore di sistema: 111 in dblog_watchdog () (riga 141 di /www/modules/dblog/dblog.module).

Qual è il trucco per farlo funzionare?

Risposte:


6

Per quanto riguarda Master / Master (Alta disponibilità) è possibile eseguire il bilanciamento del carico quando nessun master è inattivo.

Quanto segue farà andare tutte le scritture su master1 e tutte le letture su master2. Se master1 non riesce, tutte le query andranno a master2. Se master2 non riesce, tutte le query passeranno a master1.

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

Di seguito tutte le query passeranno a master1. Se master1 non riesce, tutte le query andranno a master2:

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

Grazie per questa risposta Capisco che questo è piuttosto vecchio e potrebbe essere obsoleto. Hai qualche consiglio per implementare lo stesso nell'ultima versione di Drupal?
Gaurav Ojha,

4

A beneficio di altri - il meglio che sono riuscito a trovare - Drupal 7 non sembra avere funzionalità di alta disponibilità del database integrate.

È possibile impostare due server mysql in una configurazione master / slave, ma la cosa migliore da fare è inviare tutte le scritture al master e tutte le letture allo slave. Ciò fornisce la distribuzione del carico grezzo ma non il failover.

Vale a dire se il server mysql master si spegne tutte le scommesse sono disattivate - il sito si interrompe con un brutto messaggio di errore che si lamenta che PHP non può raggiungere il database principale.

Tradizionalmente, a quanto ho capito, il modo per affrontare questo problema con altri software consiste nell'utilizzare cluster mysql ndb o proxy mysql - ma dopo aver letto un po '- queste tecnologie apparentemente non funzionano bene con Drupal.

Tuttavia mi sono imbattuto in un modulo Drupal chiamato auto-slave ( http://drupal.org/project/autoslave ). Non è ampiamente utilizzato (ci sono 12 siti che lo utilizzano attivamente in base alle statistiche) ma sembra essere in grado di fare ciò che vogliamo. Può essere configurato in vari modi:

Master / Slave

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 (disponibilità elevata)

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 (alta disponibilità / alte prestazioni)

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)

Finora abbiamo impostato correttamente il primo (Master / Slave). In seguito cercherò di configurare Master / Master / Slave.

Spero che questo aiuti qualcun altro.


Questo ha aiutato molto. :)
esafwan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.