Ich habe zwei MySQL-Server mit Master / Slave-Replikation für die Drupal-Datenbank eingerichtet und bestätigt, dass die Datenbanken synchronisiert und repliziert sind.
Ich versuche jetzt, Drupal hauptsächlich für Failover- / Redundanzzwecke auf beide Datenbanken zu verweisen. Wenn ich unseren primären Datenbankserver neu starten muss, möchte ich nicht, dass unsere Site ausfällt. (In Fehlerszenarien ist es akzeptabel, schreibgeschützt zu sein.)
Basierend auf dem folgenden Artikel . Ich habe settings.php
wie folgt geändert :
$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',
);
Die Konfiguration ist in Ordnung, bis ich den Master herunterfahre (Service mysqld stop) - wenn ich das tue, kotzt meine Site:
PDOException: SQLSTATE [HY000] [2013] Verbindung zum MySQL-Server beim Lesen des ersten Kommunikationspakets unterbrochen, Systemfehler: 111 in drupal_is_denied () (Zeile 1895 von /www/includes/bootstrap.inc). Zusätzlich
PDOException: SQLSTATE [HY000] [2013] Verbindung zum MySQL-Server beim Lesen des ersten Kommunikationspakets unterbrochen, Systemfehler: 111 in dblog_watchdog () (Zeile 141 von /www/modules/dblog/dblog.module).
Was ist der Trick, um diese Arbeit zu machen?
Zum Nutzen anderer - so gut ich es herausfinden konnte - scheint Drupal 7 keine Datenbank-Hochverfügbarkeitsfunktion eingebaut zu haben.
Sie können zwei MySQL-Server in einer Master / Slave-Konfiguration einrichten. Am besten senden Sie jedoch alle Schreibvorgänge an den Master und alle Lesevorgänge an den Slave. Dies ermöglicht eine Rohlastverteilung, jedoch kein Failover.
Das heißt, wenn der Master-MySQL-Server ausfällt, sind alle Wetten deaktiviert - die Site fällt mit einer hässlichen Fehlermeldung aus, die sich darüber beschwert, dass PHP die Master-Datenbank nicht erreichen kann.
Soweit ich weiß, besteht die Möglichkeit, dies mit anderer Software zu beheben, darin, entweder MySQL-ndb-Cluster oder MySQL-Proxy zu verwenden - aber nach einigem Lesen funktionieren diese Technologien anscheinend nicht gut mit Drupal.
Ich bin jedoch auf ein Drupal-Modul namens Auto-Slave gestoßen ( http://drupal.org/project/autoslave ). Es ist nicht weit verbreitet (es gibt 12 Websites, die es laut Statistik aktiv nutzen), aber es scheint in der Lage zu sein, das zu tun, was wir wollen. Es kann auf verschiedene Arten konfiguriert werden:
Master / Slave
Master / Master (Hochverfügbarkeit)
Master / Master / Slave (Hochverfügbarkeit / Hochleistung)
Bisher haben wir den ersten (Master / Slave) erfolgreich eingerichtet. Ich werde als nächstes versuchen, Master / Master / Slave einzurichten.
Hoffentlich hilft das jemand anderem.
quelle