sql >> Databasteknik >  >> RDS >> PostgreSQL

Utmaningar med att skala Moodle PostgreSQL-databasen

Moodle är det mest populära Learning Management System (LMS) som gör det möjligt för lärare att skapa sin egen webbplats med kurser eller innehåll som utökar lärandet. Den här typen av plattformar blir allt viktigare för att du ska kunna fortsätta lära dig på distans när det traditionella utbildningssystemet inte är tillgängligt eller bara som ett komplement till det, så ökningen av trafik eller användare kräver att du skala din miljö för att säkerställa låg respons tid.

Skalbarhet är egenskapen hos ett system/databas för att hantera en växande mängd krav genom att lägga till resurser. Det finns olika tillvägagångssätt tillgängliga för att skala din databas beroende på hur du behöver skala den, och i en produktionsmiljö är det troligen inte önskvärt att långa stilleståndstider, så du bör också ta hänsyn till detta.

I den här bloggen kommer vi att titta på vilka skalningsalternativ som finns och hur du skalar din Moodle PostgreSQL-databas på ett enkelt sätt utan att påverka ditt körsystem.

Horisontell skalning och vertikal skalning

Det finns två huvudsakliga sätt att skala din databas:

  • Horisontell skalning (utskalning):Det utförs genom att lägga till fler databasnoder som skapar eller ökar ett databaskluster.
  • Vertikal skalning (uppskalning):Det utförs genom att lägga till fler hårdvaruresurser (CPU, minne, disk) till en befintlig databasnod.

För horisontell skalning , kan du lägga till fler databasnoder som standbynoder. Det kan hjälpa dig att förbättra läsprestandan och balansera trafiken mellan noderna. I det här fallet måste du lägga till en lastbalanserare för att distribuera trafik till rätt nod beroende på policyn och nodens tillstånd. Du bör också överväga att lägga till två eller flera belastningsutjämnarnoder för att undvika en enda felpunkt, och använda ett verktyg som "Keepalived", för att säkerställa tillgängligheten. Keepalved är en tjänst som låter dig konfigurera en virtuell IP-adress inom en aktiv/passiv grupp av servrar. Denna virtuella IP-adress tilldelas en aktiv server (aktiv lastbalanserare). Om denna server misslyckas migreras IP-adressen automatiskt till den "sekundära" passiva servern, vilket gör att den kan fortsätta arbeta med samma IP-adress på ett transparent sätt för systemen.

För vertikal skalning , kan det behövas att ändra vissa konfigurationsparametrar för att tillåta PostgreSQL att använda en ny eller bättre hårdvarururs. Låt oss se några av dessa parametrar från PostgreSQL-dokumentationen.

  • work_mem:Anger mängden minne som ska användas av interna sorteringsoperationer och hashtabeller innan skrivning till temporära diskfiler. Flera löpsessioner kan göra sådana operationer samtidigt, så det totala minnet som används kan vara många gånger värdet av work_mem.
  • maintenance_work_mem:Anger den maximala mängden minne som ska användas av underhållsoperationer, som VACUUM, CREATE INDEX och ALTER TABLE ADD FOREIGN KEY. Större inställningar kan förbättra prestanda för dammsugning och för att återställa databasdumpar.
  • autovacuum_work_mem:Anger den maximala mängden minne som ska användas av varje autovacuum-arbetarprocess.
  • autovacuum_max_workers:Anger det maximala antalet autovacuumprocesser som kan köras samtidigt.
  • max_worker_processes:Anger det maximala antalet bakgrundsprocesser som systemet kan stödja. Ange gränsen för processen som dammsugning, kontrollpunkter och fler underhållsjobb.
  • max_parallel_workers:Anger det maximala antalet arbetare som systemet kan stödja för parallella operationer. Parallella arbetare tas från poolen av arbetsprocesser som fastställts av föregående parameter.
  • max_parallel_maintenance_workers:Anger det maximala antalet parallella arbetare som kan startas av ett enda verktygskommando. För närvarande är det enda parallella verktygskommandot som stöder användningen av parallella arbetare CREATE INDEX, och endast när man bygger ett B-trädindex.
  • effective_cache_size:Ställer in planerarens antagande om den effektiva storleken på diskcachen som är tillgänglig för en enda fråga. Detta tas med i uppskattningar av kostnaden för att använda ett index; ett högre värde gör det mer sannolikt att indexskanningar kommer att användas, ett lägre värde gör det mer sannolikt att sekventiella skanningar kommer att användas.
  • shared_buffers:Anger mängden minne som databasservern använder för delade minnesbuffertar. Inställningar som är betydligt högre än minimum krävs vanligtvis för bra prestanda.
  • temp_buffers:Anger det maximala antalet temporära buffertar som används av varje databassession. Dessa är sessionslokala buffertar som endast används för åtkomst till tillfälliga tabeller.
  • effective_io_concurrency:Anger antalet samtidiga disk I/O-operationer som PostgreSQL förväntar sig kan utföras samtidigt. Att höja detta värde kommer att öka antalet I/O-operationer som varje enskild PostgreSQL-session försöker initiera parallellt. För närvarande påverkar den här inställningen bara bitmappshögskanningar.
  • max_connections:Bestämmer det maximala antalet samtidiga anslutningar till databasservern. Genom att öka denna parameter kan PostgreSQL köra fler backend-processer samtidigt.

Utmaningen här kan vara hur du vet om du behöver skala din Moodle-databas och på vilket sätt, och svaret är Övervakning.

Övervaka PostgreSQL för Moodle

Att skala en databas är en komplex process, så du bör kontrollera några mätvärden för att kunna bestämma den bästa strategin för att skala den.

Du kan övervaka CPU, minne och diskanvändning för att avgöra om det finns något konfigurationsproblem eller om du faktiskt behöver skala din databas. Om du till exempel ser en hög serverbelastning men databasaktiviteten är låg, finns det förmodligen inget behov av att skala den, du behöver bara kontrollera konfigurationsparametrarna för att matcha den med dina hårdvaruresurser.

Att kontrollera diskutrymmet som används av PostgreSQL-noden per databas kan hjälpa dig att bekräfta om du behöver mer disk eller till och med en tabellpartition. För att kontrollera diskutrymmet som används av en databas/tabell kan du använda någon PostgreSQL-funktion som pg_database_size eller pg_table_size.

Från databassidan bör du kontrollera:

  • Anslutningsmängd
  • Köra frågor
  • Indexanvändning
  • Uppsvälld
  • replikeringsfördröjning

Detta kan vara tydliga mätvärden för att bekräfta om skalningen av din databas behövs.

ClusterControl som ett skalnings- och övervakningssystem

ClusterControl kan hjälpa dig att hantera både skalningssätt som vi nämnde tidigare och att övervaka alla nödvändiga mätvärden för att bekräfta skalningskravet.

Om du inte använder ClusterControl ännu, kan du installera den och distribuera eller importera din nuvarande PostgreSQL-databas genom att välja alternativet "Importera" och följa stegen för att dra nytta av alla ClusterControl-funktioner som säkerhetskopior, automatisk failover, varningar, övervakning och mer.

Horisontell skalning

För horisontell skalning, om du går till klusteråtgärder och väljer "Lägg till replikeringsslav", kan du antingen skapa en ny replik från början eller lägga till en befintlig PostgreSQL-databas som en replik.

Låt oss se hur det kan vara en väldigt enkel uppgift att lägga till en ny replikeringsslav.

Som du kan se på bilden behöver du bara välja din Master server, ange IP-adressen för din nya slavserver och databasporten. Sedan kan du välja om du vill att ClusterControl ska installera programvaran åt dig och om replikeringsslaven ska vara Synchronous eller Asynchronous.

På detta sätt kan du lägga till så många repliker du vill och sprida lästrafik mellan dem med hjälp av en lastbalanserare, som du även kan implementera med ClusterControl.

Nu, om du går till klusteråtgärder och väljer "Lägg till lastbalanserare", kan du distribuera en ny HAProxy Load Balancer eller lägga till en befintlig.

Och sedan, i samma lastbalanseringssektion, kan du lägga till en Keepalived tjänst som kommer att köras på belastningsbalansnoderna för att förbättra din högtillgänglighetsmiljö.

Efter att ha lagt till en lastbalanserare eller använt en virtuell IP med Keepalived-tjänsten i plats måste du uppdatera din Moodle-konfiguration för att använda den nya databasslutpunkten. För detta, gå till din Moodle-rotkatalog och ändra filen config.php med den nya IP-adressen:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

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

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Se till att du kan komma åt din databas via Load Balancer eller Virtual IP-adress, eller om du behöver uppdatera din pg_hba.conf PostgreSQL-fil för att tillåta det.

Vertikal skalning

För vertikal skalning, med ClusterControl kan du övervaka dina databasnoder från både operativsystemet och databassidan. Du kan kontrollera vissa mätvärden som CPU-användning, minne, anslutningar, vanliga frågor, körfrågor och ännu mer. Du kan också aktivera avsnittet Dashboard, som låter dig se mätvärdena på ett mer detaljerat och vänligare sätt.

Från ClusterControl kan du också utföra olika hanteringsuppgifter som Reboot Host, Rebuild Replikeringsslav, eller Promote Slave, med ett klick.

Slutsats

Att skala din Moodle PostgreSQL-databas kan vara en svår uppgift eftersom du behöver veta hur du behöver skala och hur du gör det utan att påverka systemen. Att ha ett bra övervakningssystem är det första steget för att veta när och hur du behöver skala din Moodle-databas. Att lägga till en lastbalanserare hjälper dig att undvika onödiga driftstopp och det kommer också att förbättra den höga tillgängligheten i din LMS-miljö.

Alla dessa saker som vi nämnde kan göras med ClusterControl som kommer att göra jobbet enklare. ClusterControl tillhandahåller en hel rad funktioner, som övervakning, varning, automatisk failover, säkerhetskopiering, punkt-i-tid återställning, säkerhetskopieringsverifiering, skalning och mer.


  1. Kolumnen finns inte?

  2. Ansluter till Oracle Database med SQL Server Integration Services

  3. MySQL ATAN2() Funktion – Returnera bågtangenten av 2 värden

  4. SQL tidsskillnad mellan två datum resulterar i hh:mm:ss