Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So stellen Sie die Chamilo MySQL-Datenbank für Hochverfügbarkeit bereit

Chamilo ist, genau wie Open edX oder Moodle, eine Plattform, die es Bildungseinrichtungen ermöglicht, ihre Bildungsaktivitäten ins Internet zu übertragen. Angesichts der Tatsache, dass sich der Großteil der Bildungsaktivitäten im letzten Jahr online verlagert hat, ist es nicht verwunderlich, dass immer mehr Menschen Schwierigkeiten haben, ihre Bildungsplattformen zu erweitern und eine bessere Verfügbarkeit zu gewährleisten.

Chamilo ist eine Plattform, die auf dem *AMP-Stack basiert, der aus Apache, MySQL und PHP besteht. Wie üblich ist die Datenbank das am schwierigsten zu migrierende Element in eine hochverfügbare Umgebung. In diesem kurzen Blog möchten wir diskutieren, wie Sie die Hochverfügbarkeit der Chamilo-Datenbank verbessern können.

Wie Sie sich vorstellen können, ist die einzelne MySQL-Datenbank ein einzelner Fehlerpunkt und sollte daher in Produktionsumgebungen vermieden werden. Glücklicherweise gibt es einige Möglichkeiten, wie Sie die Verfügbarkeit der MySQL-Datenbank verbessern können.

Eine Möglichkeit, das Problem anzugehen, wäre die Verwendung eines Galera-Clusters. Die minimale Bereitstellung sollte aus drei Knoten bestehen – solche Cluster können den Ausfall eines einzelnen Knotens automatisch verarbeiten. Die verbleibenden zwei Knoten funktionieren weiterhin und reagieren auf Abfragen, die von der Anwendung kommen.

Dieses Setup würde eine Art Load Balancer vor dem Galera-Cluster erfordern. Seine Aufgabe wäre es, den Verkehr zu handhaben und ihn an ein geeignetes Ziel umzuleiten.

Sehen wir uns an, wie ClusterControl Ihnen dabei helfen kann, einen Galera-Cluster mit einer Reihe von Load-Balancern bereitzustellen, die Sie für Ihre Chamilo-Plattform verwenden können.

MariaDB-Cluster bereitstellen

Dieses Mal werden wir versuchen, MariaDB Cluster als unser Backend zu verwenden. Chamilo unterstützt MySQL 5.6 und neuer oder MariaDB 5.5 und neuer. Als ersten Schritt müssen wir im Assistenten „Bereitstellen“ auswählen:

Sobald wir das getan haben, müssen wir die SSH-Konnektivität, passwortlos, Schlüssel definieren -basierter SSH-Zugriff ist eine Voraussetzung für ClusterControl, andernfalls ist es nicht in der Lage, die Datenbankinfrastruktur zu verwalten:Es verlässt sich auf die SSH-Konnektivität, um Befehle auszuführen, um Dienste zu starten oder zu stoppen, Software zu installieren und so weiter.

Dann sollten wir uns für Anbieter, Version, Passwort, Hosts und einiges mehr entscheiden zusätzliche Einstellungen:

Nachdem all diese Details ausgefüllt sind, können wir mit der Bereitstellung fortfahren.

ProxySQL bereitstellen

Wie bereits erwähnt, ist die Datenbank selbst nicht das einzige Element, das wir bereitstellen möchten. Wir könnten einen Load Balancer verwenden, mit dem wir den Datenverkehr verschieben, wenn einer der Knoten ausfallen würde. Wir werden es auch verwenden, um eine Lese-/Schreibaufteilung bereitzustellen, alle Schreibvorgänge an einen einzelnen MariaDB Galera-Knoten zu leiten und die Lesevorgänge auf die verbleibenden MariaDB Galera-Knoten aufzuteilen. Dies hilft uns, Konflikte zwischen Schreibvorgängen zu vermeiden, die auf verschiedenen Galera-Knoten ausgeführt werden.

Für ProxySQL erfordert ClusterControl auch das Ausfüllen einiger Informationen - Sie müssen die auswählen Host, auf dem es installiert werden soll, entscheiden Sie sich für die ProxySQL-Version, die Anmeldeinformationen für die administrativen und überwachenden Benutzer. Diese Benutzer werden verwendet, um ProxySQL zu verwalten und den Status Ihres Galera-Clusters zu überwachen. Sie sollten auch vorhandene Datenbankbenutzer importieren oder einen neuen für Ihre Anwendung erstellen. Schließlich liegt es an Ihnen, zu entscheiden, welche Datenbankknoten Sie mit ProxySQL verwenden möchten, und zu entscheiden, ob Sie implizite Transaktionen verwenden.

Bereitstellen von Keepalived

ProxySQL wird hervorragend funktionieren, indem es unseren Datenverkehr über die Cluster-Knoten verteilt. Andererseits fungiert ein einzelner ProxySQL-Knoten als Single Point of Failure. Deshalb wollen wir mindestens zwei davon einsetzen. Dann stellt sich die Frage, wie der Ausfall des ProxySQL-Knotens erkannt und der Datenverkehr auf einen fehlerfreien ProxySQL verschoben werden kann. Hier kommt Keepalived. Die Idee hier ist, eine virtuelle IP zu haben, die auf die funktionierende ProxySQL-Instanz zeigt. Eine solche VIP kann dann in der Anwendung als Endpunkt für die MySQL-Datenbankkonnektivität verwendet werden, wodurch sichergestellt wird, dass die Anwendung immer auf fehlerfreies ProxySQL trifft, was wiederum sicherstellt, dass der Datenverkehr den fehlerfreien Cluster-Knoten erreicht.

Nachdem Sie Details wie zu überwachende ProxySQL-Instanzen, virtuelle IP und die Die Schnittstelle VIP sollte sich an uns binden und ist bereit für die Bereitstellung. Nach ein paar Minuten sollte alles bereit sein und die Topologie sollte wie folgt aussehen:

Das ist es, wenn es um die Umgebung geht, die wir erstellt haben. Sie können Ihr Chamilo auf den VIP und Port 6033 richten, dies sollte ausreichen, um die Verbindung zu Ihrer Backend-Datenbank herzustellen. Wenn Sie auf Probleme im Zusammenhang mit veralteten Lesevorgängen stoßen (wenn der Schreibvorgang auf einen Knoten trifft und Chamilo dann versucht, von einem anderen Knoten zu lesen), können Sie prüfen, ob Kausalitätsprüfungen auf dem Galera-Cluster aktiviert werden. Es gibt eine wsrep_sync_wait-Variable, die Tests für mehrere Zugriffe aktivieren kann Muster:liest, aktualisiert, fügt ein, löscht, ersetzt und SHOW-Befehle Wenn wir nur an den SELECT-Abfragen interessiert sind, werden wir diese Variable mit Hilfe des ClusterControl-Konfigurationsmanagements auf '1' setzen.

Dadurch wird diese Änderung auf allen MariaDB-Cluster-Knoten durchgeführt.

Das ist so ziemlich alles. Wenn Sie einige Ihrer Erfahrungen mit Chamilo teilen möchten, können Sie uns gerne einen Kommentar hinterlassen.