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

So verwalten Sie automatisch das Failover der MySQL-Datenbank für Moodle

In unseren vorherigen Blogs haben wir begründet, warum Sie ein Datenbank-Failover benötigen, und erklärt, wie ein Failover-Mechanismus funktioniert. Ich teile dies, falls Sie Fragen dazu haben, warum Sie einen Failover-Mechanismus für Ihre MySQL-Datenbank einrichten sollten. Wenn ja, lesen Sie bitte unsere vorherigen Blog-Beiträge.

So richten Sie automatisches Failover ein

Der Vorteil bei der Verwendung von MySQL oder MariaDB zur automatischen Verwaltung Ihres Failover besteht darin, dass es verfügbare Tools gibt, die Sie in Ihrer Umgebung verwenden und implementieren können. Von Open-Source- bis hin zu Unternehmenslösungen. Die meisten Tools sind nicht nur Failover-fähig, es gibt auch andere Funktionen wie Switchover, Überwachung und erweiterte Funktionen, die mehr Verwaltungsfunktionen für Ihren MySQL-Datenbankcluster bieten können. Im Folgenden gehen wir auf die gebräuchlichsten ein, die Sie verwenden können.

MHA (Master High Availability) verwenden

Wir haben dieses Thema mit MHA mit den häufigsten Problemen und deren Behebung behandelt. Wir haben MHA auch mit MRM oder mit MaxScale verglichen.

Die Einrichtung mit MHA für hohe Verfügbarkeit ist vielleicht nicht einfach, aber es ist effizient in der Anwendung und flexibel, da es einstellbare Parameter gibt, die Sie definieren können, um Ihr Failover anzupassen. MHA wurde getestet und verwendet. Aber mit fortschreitender Technologie hinkt MHA hinterher, da es GTID für MariaDB nicht unterstützt und in den letzten 2 oder 3 Jahren keine Updates veröffentlicht hat.

Durch Ausführen des masterha_manager-Skripts 

masterha_manager --conf=/etc/app1.cnf

Wobei ein Beispiel /etc/app1.cnf wie folgt aussehen soll,

[server default]

user=cmon

password=pass

ssh_user=root

# working directory on the manager

manager_workdir=/var/log/masterha/app1

# working directory on MySQL servers

remote_workdir=/var/log/masterha/app1

[server1]

hostname=node1

candidate_master=1

[server2]

hostname=node2

candidate_master=1

[server3]

hostname=node3

no_master=1

Parameter wie „no_master“ und „candidate_master“ sind von entscheidender Bedeutung, wenn Sie gewünschte Knoten als Ziel-Master und Knoten, die Sie nicht als Master haben möchten, auf die Whitelist setzen.

Sobald es eingestellt ist, sind Sie bereit für ein Failover für Ihre MySQL-Datenbank, falls ein Fehler auf der Primär- oder Master-Datenbank auftritt. Das Skript masterha_manager verwaltet das Failover (automatisch oder manuell), trifft Entscheidungen darüber, wann und wo ein Failover erfolgen soll, und verwaltet die Slave-Wiederherstellung während der Heraufstufung des Masterkandidaten zum Anwenden von Differential-Relay-Protokollen. Wenn die Master-Datenbank stirbt, koordiniert der MHA-Manager den MHA-Knotenagenten, da er differenzielle Relay-Protokolle auf die Slaves anwendet, die nicht über die neuesten Binlog-Ereignisse vom Master verfügen.

Schauen Sie sich an, was der MHA-Knotenagent tut und welche Skripte daran beteiligt sind. Im Grunde ist es das Skript, das der MHA-Manager aufruft, wenn ein Failover auftritt. Er wartet auf sein Mandat vom MHA-Manager, während er nach dem neuesten Slave sucht, der die binlog-Ereignisse enthält, und fehlende Ereignisse mithilfe von scp vom Slave kopiert und auf sich selbst anwendet. Wie bereits erwähnt, wendet es Relay-Logs an, löscht Relay-Logs oder speichert binäre Logs.

Wenn Sie mehr über einstellbare Parameter wissen möchten und wie Sie Ihr Failover-Management anpassen können, besuchen Sie die Parameter-Wiki-Seite für MHA.

Orchestrator verwenden

Orchestrator ist ein Hochverfügbarkeits- und Replikationsverwaltungstool für MySQL und MariaDB. Es wird von Shlomi Noach unter den Bedingungen der Apache-Lizenz, Version 2.0, veröffentlicht. Dies ist eine Open-Source-Software und übernimmt das automatische Failover, aber es gibt unzählige Dinge, die Sie anpassen oder tun können, um Ihre MySQL/MariaDB-Datenbank zu verwalten, abgesehen von der Wiederherstellung oder dem automatischen Failover.

Die Installation von Orchestrator kann einfach oder unkompliziert sein. Nachdem Sie die spezifischen Pakete heruntergeladen haben, die für Ihre Zielumgebung erforderlich sind, können Sie Ihren Cluster und Ihre Knoten für die Überwachung durch Orchestrator registrieren. Es bietet eine Benutzeroberfläche, die sehr einfach zu verwalten ist, aber viele einstellbare Parameter oder Befehlssätze enthält, die Sie verwenden können, um Ihr Failover-Management zu erreichen.

Nehmen wir an, dass Sie den Cluster endlich eingerichtet und registriert haben, indem Sie unseren primären oder Master-Knoten mit dem folgenden Befehl hinzufügen,

$ orchestrator -c discover -i pupnode21:3306

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: pupnode21

2021-01-07 12:32:31 DEBUG Cache hostname resolve pupnode21 as pupnode21

2021-01-07 12:32:31 DEBUG Connected to orchestrator backend: orchestrator:[email protected](127.0.0.1:3306)/orchestrator?timeout=1s

2021-01-07 12:32:31 DEBUG Orchestrator pool SetMaxOpenConns: 128

2021-01-07 12:32:31 DEBUG Initializing orchestrator

2021-01-07 12:32:31 INFO Connecting to backend 127.0.0.1:3306: maxConnections: 128, maxIdleConns: 32

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.222

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.222 as 192.168.40.222

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.223

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.223 as 192.168.40.223

pupnode21:3306

Jetzt haben wir unseren Cluster hinzugefügt.

Wenn ein primärer Knoten ausfällt (Hardwarefehler oder Absturz), wird Orchestrator dies tun erkennen und finden Sie den am weitesten fortgeschrittenen Knoten, der als primärer oder Master-Knoten heraufgestuft werden soll.

Jetzt verbleiben zwei Knoten im Cluster, während der primäre ausgefallen ist .

$ orchestrator-client -c topology -i pupnode21:3306

pupnode21:3306 [unknown,invalid,10.3.27-MariaDB-log,rw,ROW,>>,downtimed]

$ orchestrator-client -c topology -i pupnode22:3306

pupnode22:3306   [0s,ok,10.3.27-MariaDB-log,rw,ROW,>>]

+ pupnode23:3306 [0s,ok,10.3.27-MariaDB-log,ro,ROW,>>,GTID]

MaxScale verwenden

MariaDB MaxScale wurde als Datenbank-Load-Balancer unterstützt. Im Laufe der Jahre ist MaxScale gewachsen und gereift und wurde um mehrere reichhaltige Funktionen erweitert, darunter automatisches Failover. Seit der Veröffentlichung von MariaDB MaxScale 2.2 wurden mehrere neue Funktionen eingeführt, darunter die Failover-Verwaltung für Replikationscluster. Sie können unseren vorherigen Blog zum MaxScale-Failover-Mechanismus lesen.

Die Verwendung von MaxScale ist unter BSL, obwohl die Software frei verfügbar ist, aber erfordert, dass Sie zumindest Service mit MariaDB kaufen. Es ist möglicherweise nicht geeignet, aber falls Sie MariaDB-Unternehmensdienste erworben haben, kann dies ein großer Vorteil sein, wenn Sie die Failover-Verwaltung und ihre anderen Funktionen benötigen.

Die Installation von MaxScale ist einfach, aber das Einrichten der erforderlichen Konfiguration und das Definieren ihrer Parameter ist es nicht und erfordert, dass Sie die Software verstehen. Sie können sich auf deren Konfigurationsanleitung beziehen.

Für eine schnelle Bereitstellung können Sie ClusterControl verwenden, um MaxScale für Sie in Ihrer bestehenden MySQL/MariaDB-Umgebung zu installieren.

Nach der Installation können Sie Ihre Moodle-Datenbank einrichten, indem Sie Ihren Host auf die MaxScale-IP oder den Hostnamen und den Lese-Schreib-Port verweisen. Zum Beispiel

Für welchen Port 4008 ist Ihr Lese-/Schreibzugriff für Ihren Service-Listener. Hier ist zum Beispiel die folgende Service- und Listener-Konfiguration für meine MaxScale.

$ cat maxscale.cnf.d/rw-listener.cnf

[rw-listener]

type=listener

protocol=mariadbclient

service=rw-service

address=0.0.0.0

port=4008

authenticator=MySQLAuth



$ cat maxscale.cnf.d/rw-service.cnf

[rw-service]

type=service

servers=DB_123,DB_122,DB_124

router=readwritesplit

user=maxscale_adm

password=42BBD2A4DC1BF9BE05C41A71DEEBDB70

max_slave_connections=100%

max_sescmd_history=15000000

causal_reads=true

causal_reads_timeout=10

transaction_replay=true

transaction_replay_max_size=32Mi

delayed_retry=true

master_reconnection=true

max_connections=0

connection_timeout=0

use_sql_variables_in=master

master_accept_reads=true

disable_sescmd_history=false

Während Sie sich in Ihrer Monitorkonfiguration befinden, dürfen Sie nicht vergessen, das automatische Failover zu aktivieren oder auch die automatische Wiederverbindung zu aktivieren, wenn Sie möchten, dass der vorherige Master nicht automatisch wieder verbunden wird, wenn er wieder online geht. Es geht so,

$ egrep -r 'auto|^\['  maxscale.cnf.d/replication_monitor.cnf

[replication_monitor]

auto_failover=true

auto_rejoin=1

Beachten Sie, dass die von mir angegebenen Variablen nicht für die Verwendung in der Produktion gedacht sind, sondern nur für diesen Blogbeitrag und Testzwecke. Das Gute an MaxScale ist, dass MaxScale, sobald der Primary oder Master ausfällt, schlau genug ist, den idealen oder besten Kandidaten für die Rolle des Masters zu befördern. Daher müssen Sie Ihre IP und Ihren Port nicht ändern, da wir den Host/IP unseres MaxScale-Knotens und seinen Port als unseren Endpunkt verwendet haben, sobald der Master ausfällt. Zum Beispiel

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

Knoten DB_123, der auf 192.168.40.221 zeigt, ist der aktuelle Master. Das Beenden des Knotens DB_123 soll MaxScale veranlassen, ein Failover durchzuführen, und es sollte so aussehen:

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Down            │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

Während unsere Moodle-Datenbank immer noch aktiv ist und läuft, da unsere MaxScale auf den neuesten Master verweist, der befördert wurde.

$ mysql -hmaxscale.local.domain -umoodleuser -pmoodlepassword -P4008

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 9

Server version: 10.3.27-MariaDB-log MariaDB Server



Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



MariaDB [(none)]> select @@hostname;

+------------+

| @@hostname |

+------------+

| 192.168.40.222  |

+------------+

1 row in set (0.001 sec)

ClusterControl verwenden

ClusterControl kann kostenlos heruntergeladen werden und bietet Lizenzen für Community, Advance und Enterprise. Das automatische Failover ist nur auf Advance und Enterprise verfügbar. Automatisches Failover wird von unserer Auto-Recovery-Funktion abgedeckt, die versucht, einen ausgefallenen Cluster oder einen ausgefallenen Knoten wiederherzustellen. Wenn Sie weitere Einzelheiten dazu wünschen, lesen Sie unseren vorherigen Beitrag How ClusterControl Performs Automatic Database Recovery and Failover. Es bietet abstimmbare Parameter, die sehr bequem und einfach zu bedienen sind. Bitte lesen Sie auch unseren vorherigen Beitrag zum Automatisieren des Datenbank-Failovers mit ClusterControl.

Die Verwaltung Ihres automatischen Failover für Ihre Moodle-Datenbank muss mindestens eine virtuelle IP (VIP) als Ihren Endpunkt für Ihren Moodle-Anwendungsclient erfordern, der mit Ihrem Datenbank-Backend verbunden ist. Dazu können Sie Keepalived mit HAProxy (oder ProxySQL – abhängig von Ihrer Wahl des Load-Balancers) darüber hinaus bereitstellen. In diesem Fall muss Ihr Endpunkt der Moodle-Datenbank auf die virtuelle IP verweisen, die grundsätzlich von Keepalived zugewiesen wird, sobald Sie sie bereitgestellt haben, so wie wir es Ihnen zuvor bei der Einrichtung von MaxScale gezeigt haben. Sie können auch in diesem Blog nachsehen, wie es geht.

Wie oben erwähnt, sind einstellbare Parameter verfügbar, die Sie einfach über Ihre /etc/cmon.d/cmon_.cnf einstellen können, die sich in Ihrem ClusterControl-Host befindet, wobei CLUSTER_ID die ID Ihres Clusters ist. Dies sind die Parameter, die Ihnen helfen würden, Ihr Autofailover effizienter zu verwalten,

  • replication_check_binlog_filtration_bf_failover
  • replication_check_external_bf_failover
  • replication_failed_reslave_failover_script
  • replication_failover_blacklist
  • replication_failover_events
  • replication_failover_wait_to_apply_timeout
  • replication_failover_whitelist
  • replication_onfail_failover_script
  • Replication_post_failover_script
  • replication_post_unsuccessful_failover_script
  • replication_pre_failover_script
  • replication_skip_apply_missing_txs
  • replication_stop_on_error

ClusterControl ist sehr flexibel bei der Verwaltung des Failover, sodass Sie einige Aufgaben vor oder nach dem Failover erledigen können.

Fazit

Es gibt noch andere großartige Möglichkeiten, wenn Sie Ihr Failover für Ihre MySQL-Datenbank für Moodle einrichten und automatisch verwalten. Es hängt von Ihrem Budget ab und wofür Sie wahrscheinlich Geld ausgeben müssen. Die Verwendung von Open Source erfordert Fachwissen und erfordert mehrere Tests, um sich vertraut zu machen, da es außer der Community keinen Support gibt, den Sie ausführen können, wenn Sie Hilfe benötigen. Bei Unternehmenslösungen ist dies mit einem Preis verbunden, bietet Ihnen jedoch Unterstützung und Erleichterung, da die zeitaufwändige Arbeit verringert werden kann. Beachten Sie, dass ein versehentlich verwendetes Failover Ihrer Datenbank Schaden zufügen kann, wenn es nicht ordnungsgemäß gehandhabt und verwaltet wird. Konzentrieren Sie sich darauf, was wichtiger ist und wie Sie die Lösungen beherrschen, die Sie für die Verwaltung Ihres Moodle-Datenbank-Failovers verwenden.