Moodle is het populairste leerbeheersysteem (LMS) waarmee docenten hun eigen website kunnen maken met cursussen of inhoud die het leerproces uitbreiden. Dit soort platforms worden steeds belangrijker om u in staat te stellen op afstand te blijven leren wanneer het traditionele onderwijssysteem niet beschikbaar is of slechts als aanvulling daarop, dus de toename van het verkeer of gebruikers moeten uw omgeving schalen om een lage respons te garanderen tijd.
Schaalbaarheid is de eigenschap van een systeem/database om een groeiend aantal eisen aan te kunnen door middelen toe te voegen. Er zijn verschillende benaderingen beschikbaar om uw database te schalen, afhankelijk van de manier waarop u deze moet schalen, en in een productieomgeving is lange downtime hoogstwaarschijnlijk niet gewenst, dus u moet hier ook rekening mee houden.
In deze blog zullen we bekijken welke schaalopties beschikbaar zijn en hoe u uw Moodle PostgreSQL-database op een eenvoudige manier kunt schalen zonder uw actieve systeem te beïnvloeden.
Horizontaal schalen en verticaal schalen
Er zijn twee manieren om uw database te schalen:
- Horizontaal schalen (uitschalen):het wordt uitgevoerd door meer databaseknooppunten toe te voegen die een databasecluster creëren of vergroten.
- Vertical Scaling (scale-up):het wordt uitgevoerd door meer hardwarebronnen (CPU, geheugen, schijf) toe te voegen aan een bestaand databaseknooppunt.
Voor horizontaal schalen , kunt u meer databaseknooppunten toevoegen als stand-byknooppunten. Het kan u helpen de leesprestaties te verbeteren door het verkeer tussen de knooppunten in evenwicht te brengen. In dit geval moet u een load balancer toevoegen om verkeer naar het juiste knooppunt te distribueren, afhankelijk van het beleid en de knooppuntstatus. Overweeg ook om twee of meer load balancer-knooppunten toe te voegen om een enkel storingspunt te voorkomen, en om een tool als "Keepalived" te gebruiken om de beschikbaarheid te garanderen. Keepalive is een service waarmee u een virtueel IP-adres kunt configureren binnen een actieve/passieve groep servers. Dit Virtuele IP-adres is toegewezen aan een actieve server (actieve Load Balancer). Als deze server uitvalt, wordt het IP-adres automatisch gemigreerd naar de "secundaire" passieve server, waardoor deze op een transparante manier voor de systemen met hetzelfde IP-adres kan blijven werken.
Voor verticaal schalen , kan het nodig zijn om enkele configuratieparameters te wijzigen zodat PostgreSQL een nieuwe of betere hardwarebron kan gebruiken. Laten we enkele van deze parameters bekijken in de PostgreSQL-documentatie.
- work_mem:specificeert de hoeveelheid geheugen die moet worden gebruikt door interne sorteerbewerkingen en hashtabellen voordat naar tijdelijke schijfbestanden wordt geschreven. Meerdere actieve sessies kunnen dergelijke bewerkingen tegelijkertijd uitvoeren, dus het totale gebruikte geheugen kan vele malen groter zijn dan de waarde van work_mem.
- maintenance_work_mem:specificeert de maximale hoeveelheid geheugen die moet worden gebruikt door onderhoudsbewerkingen, zoals VACUUM, CREATE INDEX en ALTER TABLE ADD FOREIGN KEY. Grotere instellingen kunnen de prestaties verbeteren voor het opzuigen en voor het herstellen van databasedumps.
- autovacuum_work_mem:specificeert de maximale hoeveelheid geheugen die door elk autovacuum-werkproces moet worden gebruikt.
- autovacuum_max_workers:specificeert het maximum aantal autovacuumprocessen dat tegelijkertijd kan worden uitgevoerd.
- max_worker_processes:Stelt het maximum aantal achtergrondprocessen in dat het systeem kan ondersteunen. Specificeer de limiet van het proces, zoals stofzuigen, controlepunten en meer onderhoudstaken.
- max_parallel_workers:Stelt het maximum aantal werkers in dat het systeem kan ondersteunen voor parallelle bewerkingen. Parallelle werkers worden gehaald uit de pool van werkprocessen die zijn ingesteld door de vorige parameter.
- max_parallel_maintenance_workers:Stelt het maximum aantal parallelle worker's in dat kan worden gestart met een enkele opdracht van een hulpprogramma. Momenteel is CREATE INDEX de enige parallelle hulpprogramma-opdracht die het gebruik van parallelle worker ondersteunt, en alleen bij het bouwen van een B-tree-index.
- Effective_cache_size:Stelt de aanname van de planner in over de effectieve grootte van de schijfcache die beschikbaar is voor een enkele query. Hiermee wordt rekening gehouden bij schattingen van de kosten van het gebruik van een index; een hogere waarde maakt het waarschijnlijker dat indexscans worden gebruikt, een lagere waarde maakt het waarschijnlijker dat opeenvolgende scans worden gebruikt.
- shared_buffers:Stelt de hoeveelheid geheugen in die de databaseserver gebruikt voor gedeelde geheugenbuffers. Instellingen die aanzienlijk hoger zijn dan het minimum zijn meestal nodig voor goede prestaties.
- temp_buffers:Stelt het maximum aantal tijdelijke buffers in dat door elke databasesessie wordt gebruikt. Dit zijn sessie-lokale buffers die alleen worden gebruikt voor toegang tot tijdelijke tabellen.
- Effective_io_concurrency:Stelt het aantal gelijktijdige schijf-I/O-bewerkingen in waarvan PostgreSQL verwacht dat ze gelijktijdig kunnen worden uitgevoerd. Als u deze waarde verhoogt, neemt het aantal I/O-bewerkingen toe dat elke afzonderlijke PostgreSQL-sessie parallel probeert te starten. Momenteel is deze instelling alleen van invloed op bitmap-heapscans.
- max_connections:bepaalt het maximum aantal gelijktijdige verbindingen met de databaseserver. Door deze parameter te verhogen, kan PostgreSQL meer backend-processen tegelijkertijd uitvoeren.
De uitdaging hier kan zijn hoe je weet of je je Moodle-database moet schalen en op welke manier, en het antwoord is Monitoring.
PostgreSQL voor Moodle volgen
Het schalen van een database is een complex proces, dus u moet enkele statistieken controleren om de beste strategie te kunnen bepalen om deze te schalen.
U kunt het CPU-, geheugen- en schijfgebruik controleren om te bepalen of er een configuratieprobleem is of dat u uw database daadwerkelijk moet schalen. Als u bijvoorbeeld een hoge serverbelasting ziet maar de database-activiteit laag is, is het waarschijnlijk niet nodig om deze te schalen, u hoeft alleen de configuratieparameters te controleren om deze af te stemmen op uw hardwarebronnen.
Het per database controleren van de schijfruimte die door het PostgreSQL-knooppunt wordt gebruikt, kan u helpen te bepalen of u meer schijf of zelfs een tabelpartitie nodig heeft. Om de schijfruimte te controleren die door een database/tabel wordt gebruikt, kunt u een PostgreSQL-functie gebruiken, zoals pg_database_size of pg_table_size.
Van de databasekant moet je controleren:
- Hoeveelheid verbinding
- query's uitvoeren
- Indexgebruik
- Bloat
- Replicatievertraging
Dit kunnen duidelijke statistieken zijn om te bevestigen of het schalen van uw database nodig is.
ClusterControl als schaal- en bewakingssysteem
ClusterControl kan u helpen om te gaan met beide manieren van schalen die we eerder noemden en om alle benodigde statistieken te controleren om de schaalvereiste te bevestigen.
Als u ClusterControl nog niet gebruikt, kunt u het installeren en uw huidige PostgreSQL-database implementeren of importeren door de optie "Importeren" te selecteren en de stappen te volgen om te profiteren van alle ClusterControl-functies zoals back-ups, automatische failover, waarschuwingen, monitoring en meer.
Horizontaal schalen
Als u voor horizontaal schalen naar clusteracties gaat en "Replicatieslave toevoegen" selecteert, kunt u ofwel een geheel nieuwe replica maken of een bestaande PostgreSQL-database als replica toevoegen.
Laten we eens kijken hoe het toevoegen van een nieuwe replicatieslave een heel gemakkelijke taak kan zijn.
Zoals u kunt zien in de afbeelding, hoeft u alleen uw Master te kiezen server, voer het IP-adres voor uw nieuwe slave-server en de databasepoort in. Vervolgens kunt u kiezen of u wilt dat ClusterControl de software voor u installeert en of de replicatieslave Synchroon of Asynchroon moet zijn.
Op deze manier kunt u zoveel replica's toevoegen als u wilt en het leesverkeer tussen de replica's verdelen met behulp van een load balancer, die u ook kunt implementeren met ClusterControl.
Als u nu naar clusteracties gaat en "Load Balancer toevoegen" selecteert, kunt u een nieuwe HAProxy Load Balancer implementeren of een bestaande toevoegen.
En dan, in dezelfde load balancer-sectie, kun je een Keepalived toevoegen service die wordt uitgevoerd op de load balancer-knooppunten voor het verbeteren van uw omgeving met hoge beschikbaarheid.
Na het toevoegen van een Load Balancer of het gebruik van een virtueel IP-adres met de Keepalive-service in plaats, moet je je Moodle-configuratie bijwerken om het nieuwe database-eindpunt te gebruiken. Ga hiervoor naar je Moodle-hoofdmap en wijzig het config.php-bestand met het nieuwe IP-adres:
$CFG->dbhost = 'IP_ADDRESS';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'mdluser';
$CFG->dbpass = '********';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => PORT,
'dbsocket' => '',
);
Zorg ervoor dat u toegang heeft tot uw database via de Load Balancer of het virtuele IP-adres, of dat u uw pg_hba.conf PostgreSQL-bestand moet bijwerken om dit toe te staan.
Verticale schaal
Voor verticaal schalen kunt u met ClusterControl uw databaseknooppunten zowel vanaf het besturingssysteem als vanaf de databasezijde bewaken. U kunt enkele statistieken controleren, zoals CPU-gebruik, geheugen, verbindingen, topquery's, actieve query's en zelfs meer. U kunt ook het gedeelte Dashboard inschakelen, waarmee u de statistieken op een gedetailleerdere en gebruiksvriendelijkere manier kunt bekijken.
Vanuit ClusterControl kunt u ook verschillende beheertaken uitvoeren, zoals Host opnieuw opstarten, opnieuw opbouwen Replicatieslave, of promoot slaaf, met één klik.
Conclusie
Het schalen van je Moodle PostgreSQL-database kan een moeilijke taak zijn, omdat je moet weten hoe je moet schalen en hoe je dit moet doen zonder de systemen te beïnvloeden. Het hebben van een goed monitoringsysteem is de eerste stap om te weten wanneer en hoe je je Moodle-database moet schalen. Door een Load Balancer toe te voegen, voorkomt u onnodige downtime en verbetert u ook de High Availability in uw LMS-omgeving.
Al deze dingen die we noemden, kunnen worden gedaan met ClusterControl, wat het werk gemakkelijker zal maken. ClusterControl biedt een hele reeks functies, zoals monitoring, waarschuwingen, automatische failover, back-up, herstel op een bepaald tijdstip, back-upverificatie, schalen en meer.