PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Herausforderungen bei der Skalierung der Moodle PostgreSQL-Datenbank

Moodle ist das beliebteste Lernmanagementsystem (LMS), mit dem Pädagogen ihre eigene Website mit Kursen oder Inhalten erstellen können, die das Lernen erweitern. Diese Arten von Plattformen werden immer wichtiger, damit Sie weiterhin aus der Ferne lernen können, wenn das traditionelle Bildungssystem nicht verfügbar ist, oder nur als Ergänzung dazu, sodass die Zunahme des Datenverkehrs oder der Benutzer Ihre Umgebung skalieren muss, um eine geringe Resonanz zu gewährleisten Zeit.

Skalierbarkeit ist die Eigenschaft eines Systems/einer Datenbank, eine wachsende Menge an Anforderungen durch Hinzufügen von Ressourcen zu bewältigen. Je nachdem, wie Sie Ihre Datenbank skalieren möchten, stehen verschiedene Ansätze zur Verfügung, und in einer Produktionsumgebung ist eine lange Ausfallzeit höchstwahrscheinlich nicht erwünscht, daher sollten Sie dies ebenfalls berücksichtigen.

In diesem Blog sehen wir uns an, welche Skalierungsoptionen verfügbar sind und wie Sie Ihre Moodle PostgreSQL-Datenbank auf einfache Weise skalieren können, ohne Ihr laufendes System zu beeinträchtigen.

Horizontale Skalierung und vertikale Skalierung

Es gibt zwei Möglichkeiten, Ihre Datenbank zu skalieren:

  • Horizontale Skalierung (Scale-out):Sie wird durchgeführt, indem weitere Datenbankknoten hinzugefügt werden, wodurch ein Datenbankcluster erstellt oder vergrößert wird.
  • Vertikale Skalierung (Scale-up):Sie wird durchgeführt, indem einem vorhandenen Datenbankknoten weitere Hardwareressourcen (CPU, Arbeitsspeicher, Festplatte) hinzugefügt werden.

Für die horizontale Skalierung , können Sie weitere Datenbankknoten als Standby-Knoten hinzufügen. Es kann Ihnen helfen, die Leseleistung zu verbessern, indem der Datenverkehr zwischen den Knoten ausgeglichen wird. In diesem Fall müssen Sie einen Load Balancer hinzufügen, um den Datenverkehr je nach Richtlinie und Knotenstatus an den richtigen Knoten zu verteilen. Sie sollten auch in Betracht ziehen, zwei oder mehr Load-Balancer-Knoten hinzuzufügen, um einen Single Point of Failure zu vermeiden, und ein Tool wie „Keepalived“ verwenden, um die Verfügbarkeit sicherzustellen. 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 (aktiver Load Balancer) 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.

Für vertikale Skalierung , kann es erforderlich sein, einige Konfigurationsparameter zu ändern, damit PostgreSQL eine neue oder bessere Hardwareressource verwenden kann. Sehen wir uns einige dieser Parameter aus der PostgreSQL-Dokumentation an.

  • work_mem:Gibt die Speichermenge an, die von internen Sortiervorgängen und Hash-Tabellen verwendet werden soll, bevor in temporäre Festplattendateien geschrieben wird. Mehrere laufende Sitzungen könnten solche Operationen gleichzeitig ausführen, sodass der verwendete Gesamtspeicher ein Vielfaches des Wertes von work_mem betragen könnte.
  • maintenance_work_mem:Gibt die maximale Speichermenge an, die von Wartungsvorgängen wie VACUUM, CREATE INDEX und ALTER TABLE ADD FOREIGN KEY verwendet werden soll. Größere Einstellungen können die Leistung beim Vakuumieren und Wiederherstellen von Datenbank-Dumps verbessern.
  • autovacuum_work_mem:Gibt die maximale Speichermenge an, die von jedem Autovacuum-Arbeitsprozess verwendet werden soll.
  • autovacuum_max_workers:Gibt die maximale Anzahl von Autovacuum-Prozessen an, die gleichzeitig ausgeführt werden können.
  • max_worker_processes:Legt die maximale Anzahl von Hintergrundprozessen fest, die das System unterstützen kann. Legen Sie das Limit des Prozesses fest, z. B. Staubsaugen, Kontrollpunkte und weitere Wartungsarbeiten.
  • max_parallel_workers:Legt die maximale Anzahl von Workern fest, die das System für parallele Operationen unterstützen kann. Parallele Worker werden aus dem Pool von Worker-Prozessen entnommen, der durch den vorherigen Parameter eingerichtet wurde.
  • max_parallel_maintenance_workers:Legt die maximale Anzahl paralleler Worker fest, die durch einen einzigen Dienstprogrammbefehl gestartet werden können. Derzeit ist CREATE INDEX der einzige parallele Hilfsbefehl, der die Verwendung paralleler Worker unterstützt, und zwar nur beim Erstellen eines B-Tree-Index.
  • Effective_cache_size:Legt die Annahme des Planers über die effektive Größe des Festplattencaches fest, die für eine einzelne Abfrage verfügbar ist. Dies wird bei Schätzungen der Kosten für die Verwendung eines Index berücksichtigt; ein höherer Wert macht es wahrscheinlicher, dass Indexscans verwendet werden, ein niedrigerer Wert macht es wahrscheinlicher, dass sequenzielle Scans verwendet werden.
  • shared_buffers:Legt die Speichermenge fest, die der Datenbankserver für gemeinsam genutzte Speicherpuffer verwendet. Einstellungen, die deutlich über dem Minimum liegen, sind normalerweise für eine gute Leistung erforderlich.
  • temp_buffers:Legt die maximale Anzahl temporärer Puffer fest, die von jeder Datenbanksitzung verwendet werden. Dies sind sitzungslokale Puffer, die nur für den Zugriff auf temporäre Tabellen verwendet werden.
  • Effective_io_concurrency:Legt die Anzahl der gleichzeitigen Festplatten-E/A-Vorgänge fest, die PostgreSQL erwartet, dass sie gleichzeitig ausgeführt werden können. Das Erhöhen dieses Werts erhöht die Anzahl der E/A-Vorgänge, die jede einzelne PostgreSQL-Sitzung parallel zu initiieren versucht. Derzeit wirkt sich diese Einstellung nur auf Bitmap-Heap-Scans aus.
  • max_connections:Bestimmt die maximale Anzahl gleichzeitiger Verbindungen zum Datenbankserver. Durch Erhöhen dieses Parameters kann PostgreSQL mehr Backend-Prozesse gleichzeitig ausführen.

Die Herausforderung hier kann sein, wie Sie wissen, ob Sie Ihre Moodle-Datenbank skalieren müssen und auf welche Weise, und die Antwort ist Überwachung.

Überwachung von PostgreSQL für Moodle

Das Skalieren einer Datenbank ist ein komplexer Prozess, daher sollten Sie einige Metriken überprüfen, um die beste Strategie zum Skalieren bestimmen zu können.

Sie können die CPU-, Arbeitsspeicher- und Festplattennutzung überwachen, um festzustellen, ob es ein Konfigurationsproblem gibt oder ob Sie Ihre Datenbank tatsächlich skalieren müssen. Wenn Sie beispielsweise eine hohe Serverlast sehen, aber die Datenbankaktivität gering ist, besteht wahrscheinlich keine Notwendigkeit, sie zu skalieren, Sie müssen nur die Konfigurationsparameter überprüfen, um sie an Ihre Hardwareressourcen anzupassen.

Die Überprüfung des Speicherplatzes, der vom PostgreSQL-Knoten pro Datenbank verwendet wird, kann Ihnen dabei helfen, festzustellen, ob Sie mehr Speicherplatz oder sogar eine Tabellenpartition benötigen. Um den von einer Datenbank/Tabelle verwendeten Speicherplatz zu überprüfen, können Sie eine PostgreSQL-Funktion wie pg_database_size oder pg_table_size verwenden.

Von der Datenbankseite sollten Sie Folgendes überprüfen:

  • Anzahl der Verbindung
  • Ausführen von Abfragen
  • Indexnutzung
  • Aufblasen
  • Replikationsverzögerung

Dies könnten klare Metriken sein, um zu bestätigen, ob die Skalierung Ihrer Datenbank erforderlich ist.

ClusterControl als Skalierungs- und Überwachungssystem

ClusterControl kann Ihnen helfen, mit beiden zuvor erwähnten Skalierungsmethoden fertig zu werden und alle erforderlichen Metriken zu überwachen, um die Skalierungsanforderung zu bestätigen.

Wenn Sie ClusterControl noch nicht verwenden, können Sie es installieren und Ihre aktuelle PostgreSQL-Datenbank bereitstellen oder importieren, indem Sie die Option „Importieren“ auswählen und den Schritten folgen, um alle ClusterControl-Funktionen wie Backups, automatisches Failover, Warnungen, Überwachung und mehr.

Horizontale Skalierung

Für die horizontale Skalierung können Sie, wenn Sie zu Cluster-Aktionen gehen und „Replikations-Slave hinzufügen“ auswählen, entweder eine neue Replikation von Grund auf neu erstellen oder eine vorhandene PostgreSQL-Datenbank als Replikation hinzufügen.

Sehen wir uns an, wie einfach es sein kann, einen neuen Replikations-Slave hinzuzufügen.

Wie Sie im Bild sehen können, müssen Sie nur Ihren Master auswählen geben Sie die IP-Adresse Ihres neuen Slave-Servers und den Datenbankport ein. Dann können Sie wählen, ob ClusterControl die Software für Sie installieren soll und ob der Replikations-Slave synchron oder asynchron sein soll.

Auf diese Weise können Sie beliebig viele Replikate hinzufügen und den Leseverkehr mithilfe eines Lastenausgleichs verteilen, den Sie auch mit ClusterControl implementieren können.

Wenn Sie jetzt zu Cluster-Aktionen gehen und „Load Balancer hinzufügen“ auswählen, können Sie einen neuen HAProxy Load Balancer bereitstellen oder einen vorhandenen hinzufügen.

Und dann können Sie im selben Load-Balancer-Abschnitt ein Keepalived hinzufügen Dienst, der auf den Load-Balancer-Knoten ausgeführt wird, um Ihre Hochverfügbarkeitsumgebung zu verbessern.

Nachdem Sie einen Load Balancer hinzugefügt oder eine virtuelle IP mit dem Keepalived-Dienst verwendet haben Statt dessen müssen Sie Ihre Moodle-Konfiguration aktualisieren, um den neuen Datenbank-Endpunkt zu verwenden. Wechseln Sie dazu in Ihr Moodle-Stammverzeichnis und ändern Sie die Datei config.php mit der neuen IP-Adresse:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

$CFG->dbpass    = '********';

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Stellen Sie sicher, dass Sie über den Load Balancer oder die virtuelle IP-Adresse auf Ihre Datenbank zugreifen können, oder wenn Sie Ihre PostgreSQL-Datei pg_hba.conf aktualisieren müssen, um dies zuzulassen.

Vertikale Skalierung

Für die vertikale Skalierung können Sie mit ClusterControl Ihre Datenbankknoten sowohl von der Betriebssystem- als auch von der Datenbankseite überwachen. Sie können einige Metriken wie CPU-Auslastung, Arbeitsspeicher, Verbindungen, häufigste Abfragen, laufende Abfragen und noch mehr überprüfen. Sie können auch den Dashboard-Bereich aktivieren, mit dem Sie die Metriken detaillierter und benutzerfreundlicher anzeigen können.

Von ClusterControl aus können Sie auch verschiedene Verwaltungsaufgaben ausführen, z. B. Host neu starten, neu erstellen Replication Slave oder Promote Slave mit einem Klick.

Fazit

Das Skalieren Ihrer Moodle PostgreSQL-Datenbank kann eine schwierige Aufgabe sein, da Sie wissen müssen, wie Sie skalieren müssen und wie Sie dies tun, ohne die Systeme zu beeinträchtigen. Ein gutes Überwachungssystem ist der erste Schritt, um zu wissen, wann und wie Sie Ihre Moodle-Datenbank skalieren müssen. Das Hinzufügen eines Load Balancer hilft Ihnen, unnötige Ausfallzeiten zu vermeiden und verbessert auch die Hochverfügbarkeit in Ihrer LMS-Umgebung.

All diese Dinge, die wir erwähnt haben, können mit ClusterControl erledigt werden, was die Arbeit erleichtert. ClusterControl bietet eine ganze Reihe von Funktionen, wie Überwachung, Warnungen, automatisches Failover, Backup, Point-in-Time-Recovery, Backup-Verifizierung, Skalierung und mehr.