Moodle, ein Open-Source-Lernmanagementsystem, wurde im letzten Jahr immer beliebter, da die Pandemie harte Sperren erzwang und der Großteil der Bildungsaktivitäten von Schulen, Hochschulen und Universitäten auf Online-Plattformen verlagert wurde. Damit wurde Druck auf die IT-Teams ausgeübt, um sicherzustellen, dass diese Online-Plattformen in der Lage sein werden, eine viel höhere Last als früher zu bewältigen. Es wurden Fragen aufgeworfen - wie kann eine Moodle-Plattform skaliert werden, um die erhöhte Last zu bewältigen? Auf der einen Seite ist das Skalieren der Anwendung selbst nicht schwer zu bewerkstelligen, aber auf der anderen Seite ist die Datenbank ein anderes Tier. Datenbanken sind, wie alle zustandsbehafteten Dienste, notorisch schwer zu skalieren. In diesem Blogbeitrag möchten wir einige Herausforderungen besprechen, denen Sie bei der Skalierung einer Moodle-Datenbank gegenüberstehen.
Moodle-Datenbank skalieren - Die Herausforderung
Die Hauptquelle der Probleme ist das Erbe - Moodle stammt, genau wie viele Datenbanken, aus einem einzigen Datenbankhintergrund und bringt daher einige Erwartungen mit sich, die mit einer solchen Umgebung verbunden sind. Typisch ist, dass Sie eine Transaktion nach der anderen ausführen können und die zweite Transaktion immer das Ergebnis der ersten sieht. Dies ist in den meisten verteilten Datenbankumgebungen nicht unbedingt der Fall. Die asynchrone Replikation macht keine Versprechungen. Jede Transaktion kann dabei verloren gehen. Es reicht aus, dass der Master abstürzt, bevor die Transaktionsdaten an die Slaves übertragen werden. Semisynchrone Replikation bringt das Versprechen der Datensicherheit, aber es verspricht nichts anderes. Slaves können immer noch hinterherhinken, und obwohl die Daten als Relay-Log im dauerhaften Speicher gespeichert und schließlich auf den Datensatz angewendet werden, bedeutet dies noch nicht, dass sie bereits angewendet wurden. Sie können Ihre Slaves abfragen und sehen nicht die Daten, die Sie gerade an den Master geschrieben haben.
Selbst Cluster wie Galera verfügen standardmäßig nicht über die wirklich synchrone Replikation - die Lücke ist im Vergleich zu den Replikationssystemen erheblich kleiner, aber sie ist immer noch da und ein sofortiges SELECT, das nach einem vorherigen Schreibvorgang ausgeführt wird, kann das nicht sehen Daten, die Sie gerade in der Datenbank gespeichert haben, weil Ihr SELECT zu einem anderen Galera-Knoten geleitet wurde als Ihr vorheriger Schreibvorgang.
Es gibt mehrere Problemumgehungen, die Sie verwenden können, um die Moodle MySQL-Datenbank zu skalieren. Wenn Sie das Replikations-Setup verwenden, können Sie zunächst die Funktion „sicheres Lesen“ von Moodle verwenden. Wir haben das in einem unserer vorherigen Blogs behandelt. Dies wird dazu führen, dass Moodle entscheidet, welche Schreibvorgänge auf die Slaves verteilt werden und welche den Master treffen.
Einerseits ist es gut - Sie können sicher mehrere angeschlossene Slaves verwenden an den Master, sodass Sie den Master zumindest teilweise entlasten können. Andererseits ist es alles andere als ideal, weil es nur eine Teilmenge von SELECTs ist, die Sie an die Slaves senden können. Natürlich hängt alles vom konkreten Fall ab, aber Sie können damit rechnen, dass der Master ein Engpass in Bezug auf die Last bleiben wird.
Ein alternativer Ansatz könnte darin bestehen, den Galera-Cluster zu verwenden und die Last gleichmäßig auf alle Knoten zu verteilen.
Dies allein reicht nicht aus, um das gesamte Nachlesen zu bewältigen -write Probleme, aber zum Glück können Sie die Variable wsrep-sync-wait verwenden, die verwendet werden kann, um sicherzustellen, dass die Kausalitätsprüfungen vorhanden sind und sich der Cluster wie ein echter synchroner Cluster verhält. Mit dieser Einstellung können Sie sicher von allen Ihren Galera-Knoten lesen.
Natürlich wirkt sich das Erzwingen von Kausalitätsprüfungen auf die Leistung von Galera aus, aber es ist dennoch sinnvoll, da Sie vom gleichzeitigen Lesen aus mehreren Galera-Knoten profitieren können. Von diesem Punkt an ist die Skalierung von Lesevorgängen mit dem Galera-Cluster ganz einfach – Sie fügen einfach weitere Galera-Knoten zum Cluster hinzu. Load Balancer sollte neu konfiguriert werden, um sie aufzunehmen und als zusätzliches Ziel für die Lesevorgänge zu verwenden, sodass Sie sogar auf mehr als 10 Leseknoten skalieren können.
Sie müssen bedenken, dass das Hinzufügen zusätzlicher Knoten, Replikation oder Galera, es spielt keine Rolle, die Vorgänge auf dem Cluster etwas komplexer macht. Sie müssen sicherstellen, dass Ihre Knoten ordnungsgemäß überwacht werden, dass Backups funktionieren, die Replikation ordnungsgemäß ausgeführt wird und dass sich der Cluster selbst in einem korrekten Zustand befindet. Für Replikationsumgebungen muss das Failover auf die eine oder andere Weise gehandhabt werden, und sowohl für Galera als auch für die Replikation möchten Sie möglicherweise in der Lage sein, die Knoten im Cluster neu zu erstellen, wenn Sie irgendeine Art von Dateninkonsistenz im Cluster feststellen. Glücklicherweise kann ClusterControl Ihnen bei der Bewältigung dieser Herausforderungen erheblich helfen.
Wie ClusterControl bei der Verwaltung des Moodle-MySQL-Datenbank-Clusters hilft
Wenn der gesamte Cluster zusammenbricht, führt ClusterControl zunächst eine automatisierte Cluster-Wiederherstellung – solange alle Knoten verfügbar sind, startet ClusterControl den Cluster-Wiederherstellungsprozess:
Nach einiger Zeit sollte der gesamte Cluster wieder online sein.
ClusterControl enthält eine Reihe von Verwaltungsoptionen:
Sie können den Cluster skalieren, indem Sie Knoten oder Replikations-Slaves hinzufügen. Sie können sogar einen ganzen Slave-Cluster erstellen, der vom Hauptcluster repliziert wird.
Es ist möglich, einfach einen Backup-Zeitplan einzurichten, der von ClusterControl ausgeführt wird. Sie können sogar eine automatische Backup-Überprüfung einrichten.
Wahrscheinlich möchten Sie Ihren Datenbank-Cluster überwachen können. Mit ClusterControl können Sie genau das tun:
Wie Sie sehen können, ist ClusterControl eine großartige Plattform, mit der die Komplexität der Skalierung und Verwaltung der Moodle MySQL-Datenbank reduziert werden kann. Wir würden uns freuen, von Ihren Erfahrungen mit der Skalierung von Moodle und seiner Datenbank im Besonderen zu hören.