PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Sfide del ridimensionamento del database Moodle PostgreSQL

Moodle è il più popolare sistema di gestione dell'apprendimento (LMS) che consente agli educatori di creare il proprio sito Web con corsi o contenuti che estendono l'apprendimento. Questi tipi di piattaforme stanno diventando sempre più importanti per consentirti di continuare ad apprendere da remoto quando il sistema educativo tradizionale non è disponibile o solo come complemento di esso, quindi l'aumento del traffico o degli utenti richiede di ridimensionare il tuo ambiente per garantire una bassa risposta tempo.

La scalabilità è la proprietà di un sistema/database per gestire una quantità crescente di richieste aggiungendo risorse. Sono disponibili diversi approcci per ridimensionare il database a seconda del modo in cui è necessario ridimensionarlo e, in un ambiente di produzione, molto probabilmente non sono desiderati lunghi tempi di inattività, quindi dovresti tenerne conto.

In questo blog, esamineremo quali opzioni di scalabilità sono disponibili e come ridimensionare il tuo database Moodle PostgreSQL in modo semplice senza influire sul tuo sistema in esecuzione.

Ridimensionamento orizzontale e ridimensionamento verticale

Ci sono due modi principali per ridimensionare il tuo database:

  • Ridimensionamento orizzontale (scale-out):viene eseguito aggiungendo più nodi di database creando o aumentando un cluster di database.
  • Ridimensionamento verticale (scale-up):viene eseguito aggiungendo più risorse hardware (CPU, memoria, disco) a un nodo di database esistente.

Per ridimensionamento orizzontale , puoi aggiungere più nodi di database come nodi di standby. Può aiutarti a migliorare le prestazioni di lettura bilanciando il traffico tra i nodi. In questo caso, dovrai aggiungere un servizio di bilanciamento del carico per distribuire il traffico al nodo corretto a seconda della policy e dello stato del nodo. Dovresti anche considerare l'aggiunta di due o più nodi di bilanciamento del carico per evitare un singolo punto di errore e l'utilizzo di uno strumento come "Keepalived" per garantire la disponibilità. Keepalived è un servizio che consente di configurare un indirizzo IP virtuale all'interno di un gruppo di server attivo/passivo. Questo indirizzo IP virtuale viene assegnato a un server attivo (bilanciamento del carico attivo). Se questo server si guasta, l'indirizzo IP viene automaticamente migrato sul server passivo "Secondario", consentendogli di continuare a lavorare con lo stesso indirizzo IP in modo trasparente per i sistemi.

Per il ridimensionamento verticale , potrebbe essere necessario modificare alcuni parametri di configurazione per consentire a PostgreSQL di utilizzare una risorsa hardware nuova o migliore. Vediamo alcuni di questi parametri dalla documentazione di PostgreSQL.

  • work_mem:specifica la quantità di memoria da utilizzare per le operazioni di ordinamento interno e le tabelle hash prima di scrivere sui file temporanei del disco. Diverse sessioni in esecuzione potrebbero eseguire tali operazioni contemporaneamente, quindi la memoria totale utilizzata potrebbe essere molte volte il valore di work_mem.
  • maintenance_work_mem:specifica la quantità massima di memoria da utilizzare per le operazioni di manutenzione, come VACUUM, CREATE INDEX e ALTER TABLE ADD FOREIGN KEY. Impostazioni più grandi potrebbero migliorare le prestazioni per l'aspirazione e il ripristino dei dump del database.
  • autovacuum_work_mem:specifica la quantità massima di memoria che deve essere utilizzata da ciascun processo di lavoro di autovacuum.
  • autovacuum_max_workers:specifica il numero massimo di processi di autovacuum che possono essere eseguiti in qualsiasi momento.
  • max_worker_processes:imposta il numero massimo di processi in background che il sistema può supportare. Specifica il limite del processo come aspirazione, checkpoint e altri lavori di manutenzione.
  • max_parallel_workers:imposta il numero massimo di lavoratori che il sistema può supportare per operazioni parallele. I lavoratori paralleli vengono presi dal pool di processi di lavoro stabiliti dal parametro precedente.
  • max_parallel_maintenance_workers:imposta il numero massimo di lavoratori paralleli che possono essere avviati da un singolo comando di utilità. Attualmente, l'unico comando di utilità parallela che supporta l'uso di lavoratori paralleli è CREATE INDEX e solo durante la creazione di un indice B-tree.
  • effect_cache_size:imposta l'ipotesi del pianificatore sulla dimensione effettiva della cache del disco disponibile per una singola query. Questo è preso in considerazione nelle stime del costo dell'utilizzo di un indice; un valore più alto rende più probabile l'utilizzo di scansioni dell'indice, un valore più basso rende più probabile l'utilizzo di scansioni sequenziali.
  • shared_buffers:imposta la quantità di memoria utilizzata dal server di database per i buffer di memoria condivisa. Di solito sono necessarie impostazioni significativamente superiori al minimo per ottenere buone prestazioni.
  • temp_buffers:imposta il numero massimo di buffer temporanei utilizzati da ciascuna sessione del database. Questi sono buffer locali di sessione utilizzati solo per l'accesso alle tabelle temporanee.
  • efficace_io_concurrency:imposta il numero di operazioni di I/O del disco simultanee che PostgreSQL prevede possano essere eseguite simultaneamente. L'aumento di questo valore aumenterà il numero di operazioni di I/O che ogni singola sessione PostgreSQL tenta di avviare in parallelo. Attualmente, questa impostazione influisce solo sulle scansioni dell'heap bitmap.
  • max_connections:determina il numero massimo di connessioni simultanee al server di database. L'aumento di questo parametro consente a PostgreSQL di eseguire più processi di back-end contemporaneamente.

La sfida qui può essere come sapere se è necessario ridimensionare il database Moodle e in che modo, e la risposta è Monitoraggio.

Monitoraggio di PostgreSQL per Moodle

Il ridimensionamento di un database è un processo complesso, quindi dovresti controllare alcune metriche per poter determinare la migliore strategia per ridimensionarlo.

Puoi monitorare l'utilizzo di CPU, memoria e disco per determinare se c'è qualche problema di configurazione o se hai effettivamente bisogno di ridimensionare il tuo database. Ad esempio, se vedi un carico elevato del server ma l'attività del database è bassa, probabilmente non è necessario ridimensionarlo, devi solo controllare i parametri di configurazione per abbinarlo alle tue risorse hardware.

Controllare lo spazio su disco utilizzato dal nodo PostgreSQL per database può aiutarti a confermare se hai bisogno di più disco o anche di una partizione di tabella. Per controllare lo spazio su disco utilizzato da un database/tabella puoi usare alcune funzioni PostgreSQL come pg_database_size o pg_table_size.

Dal lato del database, dovresti controllare:

  • Quantità di connessione
  • Esecuzione di query
  • Utilizzo dell'indice
  • Gonfiore
  • Ritardo di replica

Queste potrebbero essere metriche chiare per confermare se è necessario il ridimensionamento del database.

ClusterControl come sistema di dimensionamento e monitoraggio

ClusterControl può aiutarti a far fronte a entrambi i modi di ridimensionamento menzionati in precedenza ea monitorare tutte le metriche necessarie per confermare il requisito di ridimensionamento.

Se non stai ancora utilizzando ClusterControl, puoi installarlo e distribuire o importare il tuo attuale database PostgreSQL selezionando l'opzione "Importa" e segui i passaggi, per sfruttare tutte le funzionalità di ClusterControl come i backup, failover automatico, avvisi, monitoraggio e altro.

Ridimensionamento orizzontale

Per il ridimensionamento orizzontale, se vai alle azioni del cluster e selezioni "Aggiungi slave di replica", puoi creare una nuova replica da zero o aggiungere un database PostgreSQL esistente come replica.

Vediamo come aggiungere un nuovo slave di replica può essere un compito davvero semplice.

Come puoi vedere nell'immagine, devi solo scegliere il tuo Master server, inserire l'indirizzo IP del nuovo server slave e la porta del database. Quindi, puoi scegliere se desideri che ClusterControl installi il software per te e se lo slave di replica deve essere sincrono o asincrono.

In questo modo, puoi aggiungere tutte le repliche che desideri e distribuire il traffico di lettura tra di esse utilizzando un sistema di bilanciamento del carico, che puoi implementare anche con ClusterControl.

Ora, se vai alle azioni del cluster e selezioni "Aggiungi Load Balancer", puoi distribuire un nuovo HAProxy Load Balancer o aggiungerne uno esistente.

E poi, nella stessa sezione del bilanciamento del carico, puoi aggiungere un Keepalived servizio che verrà eseguito sui nodi del sistema di bilanciamento del carico per migliorare il tuo ambiente ad alta disponibilità.

Dopo aver aggiunto un Load Balancer o aver utilizzato un IP virtuale con il servizio Keepalived in luogo, è necessario aggiornare la configurazione di Moodle per utilizzare il nuovo endpoint del database. Per questo, vai alla tua directory principale di Moodle e modifica il file config.php con il nuovo indirizzo IP:

$CFG->dbhost    = 'IP_ADDRESS';

$CFG->dbname    = 'moodle';

$CFG->dbuser    = 'mdluser';

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

$CFG->prefix    = 'mdl_';

$CFG->dboptions = array (

  'dbpersist' => 0,

  'dbport' => PORT,

  'dbsocket' => '',

);

Assicurati di poter accedere al tuo database tramite il Load Balancer o l'indirizzo IP virtuale, o se hai bisogno di aggiornare il tuo file pg_hba.conf PostgreSQL per consentirlo.

Ridimensionamento verticale

Per il ridimensionamento verticale, con ClusterControl è possibile monitorare i nodi del database sia dal sistema operativo che dal lato database. Puoi controllare alcune metriche come l'utilizzo della CPU, la memoria, le connessioni, le query principali, le query in esecuzione e altro ancora. Puoi anche abilitare la sezione Dashboard, che ti consente di vedere le metriche in modo più dettagliato e semplice.

Da ClusterControl, puoi anche eseguire diverse attività di gestione come Reboot Host, Rebuild Slave di replica, o Promuovi slave, con un clic.

Conclusione

Ridimensionare il tuo database Moodle PostgreSQL può essere un compito difficile poiché dovrai sapere come ridimensionare e come farlo senza influire sui sistemi. Avere un buon sistema di monitoraggio è il primo passo per sapere quando e come è necessario ridimensionare il database Moodle. L'aggiunta di un Load Balancer ti aiuterà a evitare inutili tempi di inattività e migliorerà anche l'elevata disponibilità nel tuo ambiente LMS.

Tutte queste cose che abbiamo menzionato possono essere fatte usando ClusterControl che semplificherà il lavoro. ClusterControl offre un'intera gamma di funzionalità, come monitoraggio, avvisi, failover automatico, backup, ripristino point-in-time, verifica del backup, ridimensionamento e altro ancora.