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

Come distribuire un LMS Canvas ad alta disponibilità con un cluster di database PostgreSQL

In questi tempi di pandemia, le piattaforme Learning Management System (LMS) stanno diventando sempre più importanti per consentirti di continuare ad apprendere da remoto quando il sistema educativo tradizionale non è più disponibile.

Avere una piattaforma LMS senza High Availability potrebbe essere un problema in caso di guasto, poiché tutti i tuoi sforzi per mantenere il sistema in funzione non avrebbero senso senza avere il database sempre disponibile.

In questo blog vedremo una popolare applicazione LMS chiamata Canvas LMS e come distribuirla in modo ad alta disponibilità utilizzando PostgreSQL e ClusterControl.

Cos'è Canvas?

Canvas è un sistema di gestione dell'apprendimento (LMS) basato sul Web. Viene utilizzato da istituti di apprendimento, educatori e studenti per accedere e gestire i materiali didattici dei corsi online e comunicare in merito allo sviluppo delle competenze e ai risultati di apprendimento.

Canvas include una varietà di strumenti personalizzabili per la creazione e la gestione dei corsi, analisi e statistiche di corsi e utenti e strumenti di comunicazione interna.

Distribuzione del database Canvas LMS PostgreSQL

Per prima cosa, distribuiamo un cluster PostgreSQL, che verrà utilizzato dall'applicazione Canvas LMS. Per questo, utilizzeremo ClusterControl per distribuire 3 nodi PostgreSQL (1 nodo primario e 2 nodi standby) e 2 bilanciatori di carico HAProxy con Keepalived configurato tra di loro.

HAProxy è un sistema di bilanciamento del carico che distribuisce il traffico da un'origine a una o più destinazioni e può definire regole e/o protocolli specifici per questa attività. Se una qualsiasi delle destinazioni smette di rispondere, viene contrassegnata come offline e il traffico viene inviato alle altre destinazioni disponibili.

Keepalived è un servizio che consente di configurare un indirizzo IP virtuale all'interno di un gruppo di server attivo/passivo. Questo indirizzo IP virtuale è assegnato a un server 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.

Quindi, vediamo come implementare la topologia menzionata utilizzando ClusterControl.

Distribuzione database

Per eseguire un deployment da ClusterControl, seleziona semplicemente l'opzione “Deploy” e segui le istruzioni che appaiono.

Quando si seleziona PostgreSQL, è necessario specificare Utente, Chiave o Password e Porta per connetterti tramite SSH ai tuoi server. Puoi anche aggiungere un nome per il tuo nuovo cluster e se vuoi che ClusterControl installi per te il software e le configurazioni corrispondenti.

Dopo aver impostato le informazioni di accesso SSH, è necessario definire le credenziali del database , versione e datadir (opzionale). Puoi anche specificare quale repository utilizzare.

Nel passaggio successivo, devi aggiungere i tuoi server al cluster che creerai utilizzando l'indirizzo IP o il nome host.

Nell'ultimo passaggio, puoi scegliere se la tua replica sarà Sincrona o Asincrono, quindi premi semplicemente su "Distribuisci"

Una volta terminata l'attività, puoi vedere il tuo nuovo cluster PostgreSQL nella schermata principale di ClusterControl.

Ora che hai creato il tuo cluster, puoi eseguire diverse attività su di esso, come aggiungere un sistema di bilanciamento del carico (HAProxy) o una nuova replica.

Distribuzione del sistema di bilanciamento del carico

Per eseguire una distribuzione del sistema di bilanciamento del carico, seleziona l'opzione "Aggiungi Load Balancer" nelle azioni del cluster e completa le informazioni richieste.

Devi solo aggiungere IP o nome host, porta, criterio e il nodi che utilizzerai.

Distribuzione mantenuta

Per eseguire una distribuzione Keepalived, seleziona l'opzione "Aggiungi Load Balancer" nelle azioni del cluster, quindi vai alla scheda Keepalived.

Qui, seleziona i nodi HAProxy e specifica l'indirizzo IP virtuale che essere utilizzato per accedere al database.

In questo momento, dovresti avere la seguente topologia:

Ora colleghiamo questo ambiente a Canvas LMS per l'alta disponibilità.

Come configurare l'LMS Canvas

Per prima cosa, dovrai installarlo. Esistono diversi modi per farlo, utilizzando una configurazione automatizzata su Docker, manualmente o anche utilizzando approcci diversi come QuickStart o l'installazione orientata alla produzione. Puoi controllare la documentazione ufficiale per scegliere il metodo migliore per te.

Una volta installato Canvas LMS, puoi procedere con la configurazione del file database.yml per utilizzare l'ambiente ad alta disponibilità PostgreSQL che hai appena distribuito.

$ cat config/database.yml

production:

  adapter: postgresql

  encoding: utf8

  database: canvas_production

  host: VIRTUAL_IPADDRESS

  username: CANVAS_USER

  password: CANVAS_PASSWD

  timeout: 5000

Qui, sostituisci:

  • VIRTUAL_IPADDRESS per l'indirizzo IP virtuale configurato in Keepalived

  • CANVAS_USER per l'utente del database Canvas

  • CANVAS_PASSWD per la password del database Canvas

Assicurati di poter accedere al tuo database usando il tuo indirizzo IP virtuale come host e che sia consentito nel file di configurazione pg_hba.conf PostgreSQL. Puoi testarlo eseguendo il seguente comando dal tuo server delle applicazioni:

$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production

Funzione di ripristino automatico ClusterControl

Quindi, la domanda è, a parte il processo di distribuzione, qual è il ruolo di ClusterControl qui?

In caso di errore, ClusterControl promuoverà il nodo standby più avanzato a primario e ti avviserà del problema. Inoltre, esegue il failover sul resto del nodo di standby per la replica dal nuovo server primario.

Per impostazione predefinita, HAProxy è configurato con due porte diverse:lettura-scrittura e sola lettura. Nella porta di lettura-scrittura, hai il tuo nodo principale come online e il resto dei nodi come offline, e nella porta di sola lettura hai sia il nodo primario che quello di standby online.

Quando HAProxy rileva che uno dei tuoi nodi non è accessibile, lo contrassegna automaticamente come offline e non ne tiene conto per l'invio del traffico ad esso. Il rilevamento viene eseguito dagli script di controllo dello stato configurati da ClusterControl al momento della distribuzione. Questi controllano se le istanze sono attive, se sono in fase di ripristino o sono di sola lettura.

Quando ClusterControl promuove un nodo standby, HAProxy contrassegna il vecchio primario come offline per entrambe le porte e mette il nodo promosso online nella porta di lettura-scrittura.

Se il tuo HAProxy attivo, a cui è assegnato un indirizzo IP virtuale a cui si connettono i tuoi sistemi, fallisce, Keepalived migra automaticamente questo indirizzo IP al tuo HAProxy passivo. Ciò significa che i tuoi sistemi potranno continuare a funzionare normalmente.

Conclusione

In questo blog abbiamo parlato dell'importanza di disporre di un ambiente PostgreSQL ad alta disponibilità da utilizzare con la piattaforma Canvas LMS e di come ClusterControl può aiutarti con le attività di distribuzione e ripristino automatico. Abbiamo anche menzionato come migliorare questo ambiente aggiungendo HAProxy e Keepalived per scopi di alta disponibilità.