Ich habe diese Frage gelesen MySQL Master / Slave-Replikation funktioniert nicht und seine Antwort:
Die Verwendung von Slave-Datenbanken ist im Drupal-Kern kaum implementiert. Wenn Sie Ihre eigenen Module entwickeln, müssen Aufrufe von db_query angeben, dass sie die Slave-Datenbank mit dem Array $ options verwenden möchten. Informationen zum Festlegen dieses Arrays finden Sie unter DatabaseConnection :: defaultOptions.
Gibt es eine Möglichkeit , Kätzchen zu töten, die den Kern hacken , um mehr Slave-SELECT-Abfragen zu erhalten db_query()
und db_select()
zu machen?
Standardmäßig fragen diese Funktionen den Master ab, es sei denn, sie werden ausdrücklich aufgefordert, den Slave abzufragen (siehe deren API). Sie müssen schreiben db_query($query, $args, array('target' => 'slave'))
, um den Slave abzufragen, und der Kern (und alle Module) werden nicht geschrieben, um dies zu erreichen.
Nur die Suche (siehe Slave-Teil) und der Aggregator scheinen dies zu nutzen.
Edit: 25. Oktober
Ich habe gesehen, dass Pressflow 7 nicht verfügbar ist, aber ich bin mir nicht sicher, ob es im Moment viel hilft.
Ich habe nichts Relevantes gefunden, also versuchen wir es mit ein wenig Kopfgeld, um eine Antwort zu bekommen.
Edit: 31. Oktober
Ich mache mir hauptsächlich Sorgen um Crells Kommentare zu diesem Thema: Was tun mit Sklaven? .
Hauptsächlich gibt es Probleme, wenn ich SELECT
Anfragen an den Slave sende , was mit Verzögerungen bei der Replikation und der Tatsache passiert, dass ich node_load()
einen neuen Knoten kurz nach dem Speichern machen möchte .
quelle
SELECT
Fragen? Wie gehen Sie mit Verzögerungen bei der Replikation um und der Tatsache, dass das Laden eines Knotens unmittelbar nach dem Speichern Probleme verursachen kann?Das AutoSlave- Modul leitet
SELECT
Abfragen an schreibgeschützte replizierende Datenbanken um und berücksichtigt die Replikationsverzögerung.Gemäß den Moduldokumenten wird der schreibgeschützte Replikant nur verwendet, wenn alle folgenden Bedingungen erfüllt sind:
quelle
Nach dem, was ich auf dem letzten Drupal BADcamp Pressflow gehört habe, ist dies der richtige Weg, wenn Sie Master / Slave-Konfigurationen wünschen. Sie sind auf MySQL als Datenbank beschränkt. Schauen Sie sich auch die " Hochleistungsgruppe " an
quelle
Trotz all der erstaunlichen Arbeit, die auf der Datenbankabstraktionsschicht in Drupal 7 geleistet wurde, ist dies mit Drupal Core Out-of-the-Box immer noch erstaunlich schwierig. Wie andere bereits erwähnt haben, ist AutoSlave eine Option, obwohl ich es aufgrund meiner hartnäckigen Weigerung, zu glauben, dass es so schwierig sein sollte, nicht versucht habe, dies zu tun.
Eine einfachere Lösung, die ich gefunden habe, ist die folgende. Um alle
SELECT
s an den Slave-Server weiterzuleiten, erstellen Sie eine Dateiselect.inc
im Core-includes/database/mysql
Verzeichnis mit folgendem Inhalt:Diese Methode birgt einige Risiken:
SELECT
s und leitet sie an den Slave weiter, was zweifellos zu Problemen führt, wenn Sie eine Verzögerung bei der Replikation haben. Lesen Sie diesen Satz noch einmal.includes/database/mysql/select.inc
, würde Ihre Datei während des Upgrades überschrieben und Sie müssten damit beginnen, Ihre eigene gepatchte Version von select.inc zu pflegen, die mit dem Drupal-Kern ausgeliefert wird.Wenn in settings.php keine Slave-Server angegeben sind, verursacht der obige Code kein Problem. Die Verwendung des Masterservers wird weiterhin ordnungsgemäß beeinträchtigt .
quelle
target => 'slave'
eingestellt werden kann, wird sie auf der Standardverbindung ausgeführt , wenn für die Abfrage selbst keine Option festgelegt ist. Es ist ein Schmerz, es ist nicht einfacher, das Verbindungsziel auf derquery_alter
Ebene leichter zu setzen .