Wie man MySQL-Slave tatsächlich benutzt, sobald der Master ein Failover hat oder verbrannt wurde

7

Ich habe eine MySQL-Master-Slave-Replikation, die gut funktioniert. Ich habe das gesamte Netz und die MySQL-Site gegoogelt, um das Standardverfahren für die Verwendung der Replikation zu finden, aber nichts gefunden. Es ist, als ob Administratoren sich über eine Replikation freuen, aber wenn die Zeit für eine Notfallwiederherstellung gekommen ist, wurde kein erster Plan in die Praxis umgesetzt und öffentlich geteilt.

Was ich wissen möchte, ist, wie die Slave-Maschine die Master-Maschine ersetzen kann, falls diese später beschädigt, verbrannt usw. wurde. Ich denke, die Slave-Maschine sollte die Netzwerkadresse des Masters übernehmen, aber was sollte sonst noch getan werden? Zum Beispiel das Ändern von MySQL-Benutzerberechtigungen oder das Ausführen einiger Befehle! Bitte geben Sie ggf. Referenzen an.

Jawad Al Shaikh
quelle
Jeder, der dies findet, sollte beachten, dass die Replikation zwischen Master und Slave asynchron ist. Das heißt, es gibt keine Garantie dafür, dass der Slave den Status der Datenbank vollständig aktualisiert hat, wenn der Master stirbt und der Slave aufgefordert wird, Master zu werden. Es ist sehr wahrscheinlich oder sogar wahrscheinlich, dass die Datenbank veraltet ist, abhängig von der Anzahl der Schreibvorgänge, die Sie in Ihre Datenbank erwarten.
Searchengine27

Antworten:

11

Für eine DR-Lösung möchten Sie höchstwahrscheinlich einen halbmanuellen Prozess. Das heißt, Sie müssen entscheiden, ob die Katastrophe ein vollständiges DR-Failover validiert, und es ist nicht nur ein kleiner Netzwerkfehler, und Sie stecken mit Tagen der Failback-Arbeit fest.

Um einen MySQL-Slave auf einen Master umzustellen, geben Sie einfach ein paar Befehle in MySQL ein. MySQL-Details finden Sie hier .

Ich würde dringend empfehlen, den gesamten Prozess zu skripten (und zu testen!) Und alle anderen Befehle hinzuzufügen, die Sie möglicherweise auf der Box ausführen möchten, um das DR-Failover durchzuführen (starten Sie die Webschicht neu oder was auch immer erforderlich ist). Wir verwenden func auf einem Verwaltungsserver, um Failover-Befehle in allen Ebenen unserer Anwendungen auszuführen.

Wenn ich mich auf Disaster Recovery beziehe, spreche ich von einem Site-Fehler. Bei einem Cluster-Failover sollten die Dinge wahrscheinlich automatisch und viel einfacher sein.

HampusLi
quelle
7

Um einen MySQL-Server durch ein Replikat zu ersetzen, muss lediglich die IP-Adresse des Servers geändert werden. In MySQL sind keine weiteren Befehle erforderlich.

Für zusätzlichen Komfort können Sie Folgendes tun, wenn Sie etwas Ruhe wünschen und dies automatisch tun möchten:

  • Lassen Sie beide MySQL-Server die Master-Master-Replikation durchführen. Überprüfen Sie dies hier
  • Erstellen Sie eine virtuelle IP-Adresse, die vom ersten Master-Server verwendet wird. Ich verwende Heartbeat dafür (Teil des LinuxHA-Projekts), aber Sie können die bevorzugte Waffe Ihrer Wahl für Ihr Betriebssystem verwenden
  • Konfigurieren Sie die Parameter für die IP-Umschaltung. Dies kann sein, dass das Netzwerk ausfällt, der andere Computer ausfällt oder einfach MySQL heruntergefahren wird

Dieses Setup hat viele Vorteile. Sie können problemlos Wartungsarbeiten an einem Knoten durchführen, indem Sie den Datenverkehr auf den anderen umschalten, und eine problemlose Wiederherstellung durchführen. Sie müssen nicht einmal aus dem Bett aufstehen :) Obwohl eine Empfehlung lautet, seien Sie bei Ihrem Virtual klug IP-Parameter können dazu führen, dass beide Knoten versuchen, die virtuelle IP zu beanspruchen, was nicht das gewünschte Ergebnis ist.

Luchsmann
quelle
Sieht nach einer sehr guten Lösung aus, aber ich habe noch nie von virtuellen IP-Inhalten gehört, und mein Setup ist derzeit nicht Master-Master. Ich würde es als Antwort auswählen, habe aber bereits andere ausgewählt. Danke noch einmal.
Jawad Al Shaikh
3

Angenommen, Sie haben 2 MySQL-Slaves: Slave 1 und Slave 2. Falls Ihr Master ausfällt, entscheiden Sie sich, den Slave 1 zu einem neuen Master zu befördern. Ich schlage ein Verfahren vor:

Stellen Sie sicher, dass alle Slaves alle Anweisungen in ihrem Relay-Protokoll verarbeitet haben mit:

mysql> STOP SLAVE IO_THREAD;
mysql> SHOW PROCESSLIST; to see `Has read all relay log` state.

Werben Sie auf Slave 1, um ein Meister zu werden mit:

mysql> STOP SLAVE;
mysql> RESET MASTER;

Zeigen Sie auf Slave 2 auf einen neuen Master mit:

mysql> CHANGE MASTER TO MASTER_HOST='slave 1';
mysql> START SLAVE;

Und schließlich wird jeder Client angewiesen, seine Anweisungen an Slave 1 zu richten.

http://dev.mysql.com/doc/refman/5.0/de/replication-solutions-switch.html

Quanten
quelle
gut, aber du hast wieder etwas angenommen, das nicht zu meinen Anforderungen gehört. Ich habe einen einzelnen Slave-Master, von wo ich den zweiten Slave bringen werde! Trotzdem danke ich Ihnen für die Antwort.
Jawad Al Shaikh
Wenn ja, stop slave;warten Sie einfach eine Weile, um Anweisungen zu verarbeiten, und reset master;.
Quanten