MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Erweitertes Failover mit Post/Pre-Script-Hooks

Die Bedeutung von Failover

Failover ist eine der wichtigsten Datenbankpraktiken für die Datenbankverwaltung. Es ist nicht nur nützlich, wenn Sie große Datenbanken in der Produktion verwalten, sondern auch, wenn Sie sicher sein möchten, dass Ihr System immer verfügbar ist, wann immer Sie darauf zugreifen – insbesondere auf Anwendungsebene.

Bevor ein Failover stattfinden kann, müssen Ihre Datenbankinstanzen bestimmte Voraussetzungen erfüllen. Diese Anforderungen sind in der Tat sehr wichtig für eine hohe Verfügbarkeit. Eine der Anforderungen, die Ihre Datenbankinstanzen erfüllen müssen, ist Redundanz. Redundanz ermöglicht die Fortsetzung des Failover, wobei die Redundanz so eingerichtet ist, dass sie einen Failover-Kandidaten hat, der ein (sekundärer) Replikatknoten oder aus einem Pool von Replikaten sein kann, die als Standby- oder Hot-Standby-Knoten fungieren. Der Kandidat wird entweder manuell oder automatisch basierend auf dem fortschrittlichsten oder aktuellsten Knoten ausgewählt. Normalerweise möchten Sie ein Hot-Standby-Replikat, da es Ihre Datenbank davor bewahren kann, Indizes von der Festplatte zu ziehen, da ein Hot-Standby häufig Indizes in den Pufferpool der Datenbank füllt.

Failover ist der Begriff, der verwendet wird, um zu beschreiben, dass ein Wiederherstellungsprozess stattgefunden hat. Vor dem Wiederherstellungsprozess tritt dies auf, wenn ein primärer (oder Master-) Datenbankknoten nach einem Absturz, nach Naturkatastrophen, nach einem Hardwarefehler ausfällt oder möglicherweise eine Netzwerkpartitionierung erlitten hat; Dies sind die häufigsten Fälle, in denen ein Failover stattfinden kann. Der Wiederherstellungsprozess wird normalerweise automatisch fortgesetzt und sucht dann nach der gewünschten und aktuellsten sekundären (Replik) wie zuvor angegeben.

Erweitertes Failover

Obwohl der Wiederherstellungsprozess während eines Failovers automatisch abläuft, gibt es bestimmte Fälle, in denen es nicht notwendig ist, den Prozess zu automatisieren und ein manueller Prozess übernehmen muss. Komplexität ist oft die Hauptüberlegung im Zusammenhang mit den Technologien, die den gesamten Stack Ihrer Datenbank umfassen - automatisches Failover kann auch mit manuellem Failover gemischt werden.

Bei den meisten alltäglichen Überlegungen zur Verwaltung von Datenbanken sind die meisten Bedenken im Zusammenhang mit dem automatischen Failover wirklich nicht trivial. Es ist oft praktisch, ein automatisches Failover zu implementieren und einzurichten, falls Probleme auftreten. Obwohl das vielversprechend klingt, da es die Komplexität abdeckt, kommen die erweiterten Failover-Mechanismen hinzu, und dazu gehören „Pre“-Ereignisse und „Post“-Ereignisse, die als Hooks in eine Failover-Software oder -Technologie eingebunden sind.

Diese Pre- und Post-Ereignisse beinhalten entweder Überprüfungen oder bestimmte Aktionen, die durchgeführt werden müssen, bevor das Failover endgültig fortgesetzt werden kann, und nachdem ein Failover durchgeführt wurde, einige Aufräumarbeiten, um sicherzustellen, dass das Failover schließlich erfolgreich ist ein. Glücklicherweise gibt es Tools, die nicht nur ein automatisches Failover ermöglichen, sondern auch Funktionen zum Anwenden von Pre- und Post-Script-Hooks bieten.

In diesem Blog verwenden wir das automatische ClusterControl (CC)-Failover und erklären, wie die Pre- und Post-Skript-Hooks verwendet werden und auf welchen Cluster sie sich beziehen.

ClusterControl-Replikations-Failover

Der ClusterControl-Failover-Mechanismus ist effizient über die asynchrone Replikation anwendbar, die auf MySQL-Varianten anwendbar ist (MySQL/Percona Server/MariaDB). Es ist auch auf PostgreSQL/TimescaleDB-Cluster anwendbar – ClusterControl unterstützt die Streaming-Replikation. MongoDB- und Galera-Cluster haben einen eigenen Mechanismus für automatisches Failover, der in ihre eigene Datenbanktechnologie integriert ist. Lesen Sie mehr darüber, wie ClusterControl automatische Datenbankwiederherstellung und Failover durchführt.

ClusterControl-Failover funktioniert nur, wenn die Knoten- und Clusterwiederherstellung (automatische Wiederherstellung) aktiviert ist. Das bedeutet, dass diese Schaltflächen grün sein sollten.

Die Dokumentation gibt an, dass diese Konfigurationsoptionen auch verwendet werden können, um / Folgendes deaktivieren:

enable_cluster_autorecovery=

  • Wenn nicht definiert, ist CMON standardmäßig 0 (falsch) und führt KEINE automatische Wiederherstellung durch, wenn es einen Clusterfehler erkennt. Der unterstützte Wert ist 1 (Cluster-Wiederherstellung ist aktiviert) oder 0 (Cluster-Wiederherstellung ist deaktiviert).

enable_node_autorecovery=

  • Wenn nicht definiert, ist CMON standardmäßig 0 (falsch) und führt KEINE automatische Wiederherstellung durch, wenn es einen Knotenausfall erkennt. Der unterstützte Wert ist 1 (Knotenwiederherstellung ist aktiviert) oder 0 (Knotenwiederherstellung ist deaktiviert).

Diese Optionen erfordern, wenn sie in /etc/cmon.d/cmon_.cnf gesetzt sind, einen cmon-Neustart. Daher müssen Sie mit folgendem Befehl neu starten:

$ systemctl restart cmon

Für diesen Blog konzentrieren wir uns hauptsächlich darauf, wie man die Prä-/Post-Skript-Hooks verwendet, was im Wesentlichen ein großer Vorteil für fortgeschrittenes Replikations-Failover ist.

Cluster-Failover-Replikation Pre/Post-Skriptunterstützung

Wie bereits erwähnt, unterstützen MySQL-Varianten, die asynchrone (einschließlich halbsynchrone) Replikation und Streaming-Replikation für PostgreSQL/TimescaleDB verwenden, diesen Mechanismus. ClusterControl hat die folgenden Konfigurationsoptionen, die für Pre- und Post-Script-Hooks verwendet werden können. Grundsätzlich können diese Konfigurationsoptionen über ihre Konfigurationsdateien oder über die Web-Benutzeroberfläche festgelegt werden (dazu kommen wir später).

Unsere Dokumentation gibt an, dass dies die folgenden Konfigurationsoptionen sind, die den Failover-Mechanismus ändern können, indem sie die Prä-/Post-Skript-Hooks verwenden:

replication_pre_failover_script=

  • Pfad zum Failover-Skript auf dem ClusterControl-Knoten. Dieses Skript wird ausgeführt, bevor das Failover stattfindet, aber nachdem ein Kandidat gewählt wurde und es möglich ist, den Failover-Prozess fortzusetzen. Wenn das Skript einen Wert ungleich Null zurückgibt, wird das Failover abgebrochen. Wenn das Skript definiert ist, aber nicht gefunden wird, wird das Failover abgebrochen.

  • 4 Argumente werden dem Skript übergeben:

    • arg1=”Alle Server in der Replikation”

    • arg2=”Der gescheiterte Meister”

    • arg3=”Ausgewählter Kandidat”

    • arg4=”Sklaven des alten Meisters”

  • Die Argumente werden wie folgt übergeben:pre_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Das Skript muss auf dem Controller erreichbar und ausführbar sein.

  • Beispiel:replication_pre_failover_script=/usr/local/bin/pre_failover_script.sh

replication_post_failover_script=

  • Pfad zum Failover-Skript auf dem ClusterControl-Knoten. Dieses Skript wird ausgeführt, nachdem das Failover stattgefunden hat. Wenn das Skript einen Wert ungleich Null zurückgibt, wird eine Warnung in das Auftragsprotokoll geschrieben. Das Skript muss auf dem Controller zugänglich und ausführbar sein.

  • 4 Argumente werden dem Skript übergeben:

    • arg1=”Alle Server in der Replikation”

    • arg2=”Der gescheiterte Meister”

    • arg3=”Ausgewählter Kandidat”

    • arg4=”Sklaven des alten Meisters”

  • Die Argumente werden wie folgt übergeben:post_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Das Skript muss auf dem Controller erreichbar und ausführbar sein.

  • Beispiel:replication_post_failover_script=/usr/local/bin/post_failover_script.sh

replication_post_unsuccessful_failover_script=

  • Pfad zum Skript auf dem ClusterControl-Knoten. Dieses Skript wird ausgeführt, nachdem der Failover-Versuch fehlgeschlagen ist. Wenn das Skript einen Wert ungleich Null zurückgibt, wird eine Warnung in das Jobprotokoll geschrieben. Das Skript muss auf dem Controller erreichbar und ausführbar sein.

  • 4 Argumente werden dem Skript übergeben:

    • arg1=”Alle Server in der Replikation”

    • arg2=”Der gescheiterte Meister”

    • arg3=”Ausgewählter Kandidat”

    • arg4=”Sklaven des alten Meisters”

  • Die Argumente werden wie folgt übergeben:post_fail_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Das Skript muss auf dem Controller erreichbar und ausführbar sein.

  • Beispiel:replication_post_unsuccessful_failover_script=post_fail_failover_script.sh

Technisch gesehen, sobald Sie die folgenden Konfigurationsoptionen in Ihrer Konfigurationsdatei /etc/cmon.d/cmon_.cnf eingestellt haben, muss cmon neu gestartet werden, d. h. führen Sie den folgenden Befehl aus:

$ systemctl restart cmon

Alternativ können Sie die Konfigurationsoptionen auch festlegen, indem Sie zu