Moodle er det mest populære Learning Management System (LMS), der giver undervisere mulighed for at oprette deres eget websted med kurser eller indhold, der udvider læringen. Disse typer platforme bliver mere og mere vigtige for at give dig mulighed for at fortsætte med at lære eksternt, når det traditionelle uddannelsessystem ikke er tilgængeligt eller blot som et supplement til det, så stigningen i trafik eller brugere kræver at skalere dit miljø for at sikre en lav respons tid.
Skalerbarhed er et system/databases egenskab til at håndtere en voksende mængde krav ved at tilføje ressourcer. Der findes forskellige tilgange til at skalere din database afhængigt af den måde, du skal skalere den på, og i et produktionsmiljø er der højst sandsynligt ikke ønske om lang nedetid, så du bør også tage højde for dette.
I denne blog vil vi se på, hvilke skaleringsmuligheder der er tilgængelige, og hvordan du skalerer din Moodle PostgreSQL-database på en nem måde uden at påvirke dit kørende system.
Horisontal skalering og vertikal skalering
Der er to hovedmåder at skalere din database på:
- Horisontal skalering (udskalering):Det udføres ved at tilføje flere databasenoder, der skaber eller øger en databaseklynge.
- Lodret skalering (opskalering):Det udføres ved at tilføje flere hardwareressourcer (CPU, hukommelse, disk) til en eksisterende databasenode.
Til horisontal skalering , kan du tilføje flere databasenoder som standby-noder. Det kan hjælpe dig med at forbedre læseydelsen og balancere trafikken mellem knudepunkterne. I dette tilfælde skal du tilføje en belastningsbalancer for at distribuere trafik til den korrekte node afhængigt af politikken og nodetilstanden. Du bør også overveje at tilføje to eller flere load balancer-noder for at undgå et enkelt fejlpunkt og bruge et værktøj som "Keepalived" for at sikre tilgængeligheden. Keepalved er en tjeneste, der giver dig mulighed for at konfigurere en virtuel IP-adresse inden for en aktiv/passiv gruppe af servere. Denne virtuelle IP-adresse er tildelt en aktiv server (aktiv Load Balancer). Hvis denne server fejler, migreres IP-adressen automatisk til den "sekundære" passive server, så den kan fortsætte med at arbejde med den samme IP-adresse på en gennemsigtig måde for systemerne.
Til lodret skalering , kan det være nødvendigt at ændre nogle konfigurationsparametre for at tillade PostgreSQL at bruge en ny eller bedre hardwareressource. Lad os se nogle af disse parametre fra PostgreSQL-dokumentationen.
- work_mem:Specificerer mængden af hukommelse, der skal bruges af interne sorteringsoperationer og hash-tabeller før skrivning til midlertidige diskfiler. Flere løbesessioner kunne udføre sådanne operationer samtidigt, så den samlede hukommelse, der bruges, kan være mange gange værdien af work_mem.
- maintenance_work_mem:Angiver den maksimale mængde hukommelse, der skal bruges af vedligeholdelsesoperationer, såsom VACUUM, CREATE INDEX og ALTER TABLE ADD FOREIGN KEY. Større indstillinger kan forbedre ydeevnen til støvsugning og til gendannelse af databasedumps.
- autovacuum_work_mem:Angiver den maksimale mængde hukommelse, der skal bruges af hver autovacuum-arbejdsproces.
- autovacuum_max_workers:Angiver det maksimale antal autovakuumprocesser, der kan køre på ethvert tidspunkt.
- max_worker_processes:Indstiller det maksimale antal baggrundsprocesser, som systemet kan understøtte. Angiv grænsen for processen som støvsugning, kontrolpunkter og flere vedligeholdelsesjob.
- max_parallel_workers:Indstiller det maksimale antal arbejdere, som systemet kan understøtte for parallelle operationer. Parallelle arbejdere tages fra puljen af arbejdsprocesser etableret af den foregående parameter.
- max_parallel_maintenance_workers:Indstiller det maksimale antal parallelle arbejdere, der kan startes af en enkelt hjælpekommando. I øjeblikket er den eneste parallelle hjælpekommando, der understøtter brugen af parallelle arbejdere, CREATE INDEX, og kun ved opbygning af et B-træindeks.
- effective_cache_size:Indstiller planlæggerens antagelse om den effektive størrelse af diskcachen, der er tilgængelig for en enkelt forespørgsel. Dette er indregnet i estimater af omkostningerne ved at bruge et indeks; en højere værdi gør det mere sandsynligt, at indeksscanninger vil blive brugt, en lavere værdi gør det mere sandsynligt, at sekventielle scanninger vil blive brugt.
- shared_buffers:Indstiller mængden af hukommelse, databaseserveren bruger til delt hukommelsesbuffere. Indstillinger, der er væsentligt højere end minimum, er normalt nødvendige for god ydeevne.
- temp_buffers:Indstiller det maksimale antal midlertidige buffere, der bruges af hver databasesession. Disse er sessionslokale buffere, der kun bruges til adgang til midlertidige tabeller.
- effective_io_concurrency:Indstiller antallet af samtidige disk I/O-operationer, som PostgreSQL forventer kan udføres samtidigt. At hæve denne værdi vil øge antallet af I/O-operationer, som enhver individuel PostgreSQL-session forsøger at starte parallelt. I øjeblikket påvirker denne indstilling kun bitmap-heap-scanninger.
- max_connections:Bestemmer det maksimale antal samtidige forbindelser til databaseserveren. Ved at øge denne parameter kan PostgreSQL køre flere backend-processer samtidigt.
Udfordringen her kan være, hvordan du ved, om du har brug for at skalere din Moodle-database og på hvilken måde, og svaret er Overvågning.
Overvågning af PostgreSQL til Moodle
Skalering af en database er en kompleks proces, så du bør tjekke nogle metrics for at kunne bestemme den bedste strategi til at skalere den.
Du kan overvåge CPU-, hukommelses- og diskforbruget for at afgøre, om der er et eller andet konfigurationsproblem, eller om du faktisk har brug for at skalere din database. Hvis du f.eks. ser en høj serverbelastning, men databaseaktiviteten er lav, er der sandsynligvis ikke behov for at skalere den, du behøver kun at kontrollere konfigurationsparametrene for at matche den med dine hardwareressourcer.
Tjek den diskplads, der bruges af PostgreSQL-noden pr. database, kan hjælpe dig med at bekræfte, om du har brug for mere disk eller endda en tabelpartition. For at kontrollere diskpladsen, der bruges af en database/tabel, kan du bruge nogle PostgreSQL-funktioner som pg_database_size eller pg_table_size.
Fra databasesiden bør du kontrollere:
- Mængde af forbindelse
- Kører forespørgsler
- Indeksbrug
- Opblæst
- replikeringsforsinkelse
Disse kan være klare målinger for at bekræfte, om skalering af din database er nødvendig.
ClusterControl som et skalerings- og overvågningssystem
ClusterControl kan hjælpe dig med at håndtere både skaleringsmetoder, som vi nævnte tidligere, og med at overvåge alle de nødvendige målinger for at bekræfte skaleringskravet.
Hvis du ikke bruger ClusterControl endnu, kan du installere det og implementere eller importere din nuværende PostgreSQL-database ved at vælge "Importer"-indstillingen og følge trinene for at drage fordel af alle ClusterControl-funktionerne såsom sikkerhedskopier, automatisk failover, advarsler, overvågning og mere.
Horisontal skalering
For vandret skalering, hvis du går til klyngehandlinger og vælger "Tilføj replikeringsslave", kan du enten oprette en ny replika fra bunden eller tilføje en eksisterende PostgreSQL-database som en replika.
Lad os se, hvordan det kan være en rigtig nem opgave at tilføje en ny replikeringsslave.
Som du kan se på billedet, behøver du kun at vælge din Master server, skal du indtaste IP-adressen for din nye slaveserver og databaseporten. Derefter kan du vælge, om du vil have ClusterControl til at installere softwaren for dig, og om replikeringsslaven skal være Synchronous eller Asynchronous.
På denne måde kan du tilføje lige så mange replikaer, du vil, og sprede læst trafik mellem dem ved hjælp af en load balancer, som du også kan implementere med ClusterControl.
Nu, hvis du går til klyngehandlinger og vælger "Tilføj Load Balancer", kan du implementere en ny HAProxy Load Balancer eller tilføje en eksisterende.
Og så, i den samme load balancer-sektion, kan du tilføje en Keepalived service, der kører på belastningsbalancer-noderne for at forbedre dit høje tilgængelighedsmiljø.
Efter tilføjelse af en Load Balancer eller brug af en virtuel IP med Keepalive-tjenesten i sted, skal du opdatere din Moodle-konfiguration for at bruge det nye databaseslutpunkt. For at gøre dette skal du gå til din Moodle-rodmappe og ændre config.php-filen med den nye 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' => '',
);
Sørg for, at du kan få adgang til din database via Load Balancer eller Virtual IP-adresse, eller hvis du har brug for at opdatere din pg_hba.conf PostgreSQL-fil for at tillade det.
Lodret skalering
Til vertikal skalering kan du med ClusterControl overvåge dine databasenoder fra både operativsystemet og databasesiden. Du kan tjekke nogle målinger som CPU-brug, Hukommelse, forbindelser, topforespørgsler, kørende forespørgsler og endnu mere. Du kan også aktivere sektionen Dashboard, som giver dig mulighed for at se metrics på en mere detaljeret og venligere måde.
Fra ClusterControl kan du også udføre forskellige administrationsopgaver såsom Genstart vært, Genopbygning Replikeringsslave eller Promote Slave med et enkelt klik.
Konklusion
Skalering af din Moodle PostgreSQL-database kan være en svær opgave, da du bliver nødt til at vide, hvordan du skal skalere, og hvordan du gør det uden at påvirke systemerne. At have et godt overvågningssystem er det første skridt til at vide, hvornår og hvordan du skal skalere din Moodle-database. Tilføjelse af en Load Balancer hjælper dig med at undgå unødvendig nedetid, og det vil også forbedre den høje tilgængelighed i dit LMS-miljø.
Alle disse ting, som vi nævnte, kan gøres ved hjælp af ClusterControl, som vil gøre arbejdet lettere. ClusterControl tilbyder en lang række funktioner, såsom overvågning, alarmering, automatisk failover, backup, punkt-i-tidsgendannelse, sikkerhedskopiering, skalering og mere.