In diesen Pandemiezeiten werden Plattformen für Lernmanagementsysteme (LMS) immer wichtiger, damit Sie weiterhin aus der Ferne lernen können, wenn das traditionelle Bildungssystem einfach nicht mehr verfügbar ist.
Eine LMS-Plattform ohne Hochverfügbarkeit zu haben, könnte im Falle eines Ausfalls ein Problem darstellen, da all Ihre Bemühungen, das System am Laufen zu halten, keinen Sinn machen, ohne dass die Datenbank jederzeit verfügbar ist.
In diesem Blog werden wir eine beliebte LMS-Anwendung namens Canvas LMS sehen und erfahren, wie sie mit PostgreSQL und ClusterControl hochverfügbar bereitgestellt wird.
Was ist Canvas?
Canvas ist ein webbasiertes Learning Management System (LMS). Es wird von Lerninstitutionen, Pädagogen und Studenten verwendet, um auf Lernmaterialien für Online-Kurse zuzugreifen und diese zu verwalten und über die Entwicklung von Fähigkeiten und Lernerfolgen zu kommunizieren.
Canvas enthält eine Vielzahl von anpassbaren Kurserstellungs- und -verwaltungstools, Kurs- und Benutzeranalysen und -statistiken sowie interne Kommunikationstools.
Canvas LMS PostgreSQL-Datenbankbereitstellung
Als Erstes stellen wir einen PostgreSQL-Cluster bereit, der von der Canvas LMS-Anwendung verwendet wird. Dazu verwenden wir ClusterControl, um 3 PostgreSQL-Knoten (1 Primär- und 2 Standby-Knoten) und 2 HAProxy-Load-Balancer bereitzustellen, zwischen denen Keepalived konfiguriert ist.
HAProxy ist ein Load Balancer, der den Datenverkehr von einem Ursprung zu einem oder mehreren Zielen verteilt und für diese Aufgabe spezifische Regeln und/oder Protokolle definieren kann. Wenn eines der Ziele nicht mehr reagiert, wird es als offline markiert und der Datenverkehr wird an die restlichen verfügbaren Ziele gesendet.
Keepalived ist ein Dienst, mit dem Sie eine virtuelle IP-Adresse innerhalb einer Aktiv/Passiv-Gruppe von Servern konfigurieren können. Diese virtuelle IP-Adresse wird einem aktiven Server zugewiesen. Wenn dieser Server ausfällt, wird die IP-Adresse automatisch auf den „sekundären“ passiven Server migriert, sodass dieser auf transparente Weise für die Systeme mit derselben IP-Adresse weiterarbeiten kann.
Sehen wir uns also an, wie die erwähnte Topologie mit ClusterControl implementiert wird.
Datenbankbereitstellung
Um eine Bereitstellung über ClusterControl durchzuführen, wählen Sie einfach die Option „Bereitstellen“ und folgen Sie den angezeigten Anweisungen.
Bei der Auswahl von PostgreSQL müssen Sie Benutzer, Schlüssel oder Passwort und Port angeben um sich per SSH mit Ihren Servern zu verbinden. Sie können auch einen Namen für Ihren neuen Cluster hinzufügen und wenn Sie möchten, dass ClusterControl die entsprechende Software und Konfigurationen für Sie installiert.
Nachdem Sie die SSH-Zugriffsinformationen eingerichtet haben, müssen Sie die Datenbankanmeldeinformationen definieren , Version und Datenverzeichnis (optional). Sie können auch angeben, welches Repository verwendet werden soll.
Im nächsten Schritt müssen Sie Ihre Server mithilfe der IP-Adresse oder des Hostnamens zu dem Cluster hinzufügen, den Sie erstellen werden.
Im letzten Schritt können Sie wählen, ob Ihre Replikation synchron oder Asynchron, und drücken Sie dann einfach auf „Bereitstellen“
Sobald die Aufgabe abgeschlossen ist, können Sie Ihren neuen PostgreSQL-Cluster im sehen Hauptbildschirm von ClusterControl.
Jetzt haben Sie Ihren Cluster erstellt, Sie können mehrere Aufgaben darauf ausführen, wie das Hinzufügen eines Load Balancers (HAProxy) oder einer neuen Replik.
Load-Balancer-Bereitstellung
Um eine Load-Balancer-Bereitstellung durchzuführen, wählen Sie die Option „Load-Balancer hinzufügen“ in den Cluster-Aktionen aus und vervollständigen Sie die angeforderten Informationen.
Sie müssen nur IP oder Hostname, Port, Richtlinie und die hinzufügen Knoten, die Sie verwenden werden.
Keepalived-Bereitstellung
Um eine Keepalived-Bereitstellung durchzuführen, wählen Sie die Option „Load Balancer hinzufügen“ in den Cluster-Aktionen und gehen Sie dann zum Keepalived-Tab.
Wählen Sie hier die HAProxy-Knoten aus und geben Sie die entsprechende virtuelle IP-Adresse an für den Zugriff auf die Datenbank verwendet werden.
In diesem Moment sollten Sie die folgende Topologie haben:
Lassen Sie uns nun diese Umgebung für Hochverfügbarkeit mit Canvas LMS verbinden.
So konfigurieren Sie Canvas LMS
Zuerst müssen Sie es installieren. Es gibt verschiedene Möglichkeiten, dies zu tun, mit einem automatisierten Setup auf Docker, manuell oder sogar mit verschiedenen Ansätzen wie QuickStart oder produktionsorientierter Installation. Sie können in der offiziellen Dokumentation nachsehen, um die für Sie beste Methode auszuwählen.
Sobald Sie Canvas LMS installiert haben, können Sie mit der Konfiguration der Datei database.yml fortfahren, um die soeben bereitgestellte Hochverfügbarkeitsumgebung von PostgreSQL zu verwenden.
$ cat config/database.yml
production:
adapter: postgresql
encoding: utf8
database: canvas_production
host: VIRTUAL_IPADDRESS
username: CANVAS_USER
password: CANVAS_PASSWD
timeout: 5000
Hier ersetzen:
-
VIRTUAL_IPADDRESS für die in Keepalived konfigurierte virtuelle IP-Adresse
-
CANVAS_USER für den Canvas-Datenbankbenutzer
-
CANVAS_PASSWD für das Passwort der Canvas-Datenbank
Stellen Sie sicher, dass Sie mit Ihrer virtuellen IP-Adresse als Host auf Ihre Datenbank zugreifen können und diese in der PostgreSQL-Konfigurationsdatei pg_hba.conf zugelassen ist. Sie können es testen, indem Sie den folgenden Befehl von Ihrem Anwendungsserver ausführen:
$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production
Autorecovery-Funktion von ClusterControl
Also stellt sich die Frage, welche Rolle ClusterControl hier neben dem Deployment-Prozess spielt?
Im Falle eines Fehlers stuft ClusterControl den fortschrittlichsten Standby-Knoten zum Primärknoten hoch und benachrichtigt Sie über das Problem. Außerdem wird für den Rest des Standby-Knotens ein Failover durchgeführt, um vom neuen primären Server zu replizieren.
Standardmäßig ist HAProxy mit zwei verschiedenen Ports konfiguriert:Read-Write und Read-Only. Im Lese-Schreib-Port ist Ihr primärer Knoten online und die restlichen Knoten offline, und im Nur-Lese-Port sind sowohl der primäre als auch der Standby-Knoten online.
Wenn HAProxy feststellt, dass einer Ihrer Knoten nicht erreichbar ist, markiert es ihn automatisch als offline und berücksichtigt ihn beim Senden von Datenverkehr nicht. Die Erkennung erfolgt durch Zustandsprüfungsskripte, die von ClusterControl zum Zeitpunkt der Bereitstellung konfiguriert werden. Diese prüfen, ob die Instanzen aktiv sind, ob sie gerade wiederhergestellt werden oder schreibgeschützt sind.
Wenn ClusterControl einen Standby-Knoten heraufstuft, markiert HAProxy den alten primären Knoten für beide Ports als offline und setzt den heraufgestuften Knoten im Lese-Schreib-Port online.
Wenn Ihr aktiver HAProxy, dem eine virtuelle IP-Adresse zugewiesen ist, mit der sich Ihre Systeme verbinden, ausfällt, migriert Keepalived diese IP-Adresse automatisch auf Ihren passiven HAProxy. Das bedeutet, dass Ihre Systeme dann normal weiter funktionieren können.
Fazit
In diesem Blog haben wir darüber gesprochen, wie wichtig es ist, eine hochverfügbare PostgreSQL-Umgebung für die Verwendung mit Ihrer Canvas LMS-Plattform zu haben, und wie ClusterControl Ihnen sowohl bei Bereitstellungs- als auch bei automatischen Wiederherstellungsaufgaben helfen kann. Wir haben auch erwähnt, wie man diese Umgebung verbessern kann, indem man HAProxy und Keepalived für Hochverfügbarkeitszwecke hinzufügt.