PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment déployer un LMS Canvas hautement disponible avec un cluster de bases de données PostgreSQL

En ces temps de pandémie, les plateformes de système de gestion de l'apprentissage (LMS) deviennent de plus en plus importantes pour vous permettre de continuer à apprendre à distance lorsque le système éducatif traditionnel n'est tout simplement plus disponible.

Avoir une plate-forme LMS sans haute disponibilité pourrait être un problème en cas d'échec, car tous vos efforts pour maintenir le système en marche n'auront aucun sens sans avoir la base de données disponible à tout moment.

Dans ce blog, nous verrons une application LMS populaire appelée Canvas LMS, et comment la déployer de manière à haute disponibilité en utilisant PostgreSQL et ClusterControl.

Qu'est-ce que Canvas ?

Canvas est un système de gestion de l'apprentissage (LMS) basé sur le Web. Il est utilisé par les établissements d'enseignement, les éducateurs et les étudiants pour accéder et gérer le matériel d'apprentissage des cours en ligne et communiquer sur le développement des compétences et les résultats d'apprentissage.

Canvas comprend une variété d'outils personnalisables de création et de gestion de cours, d'analyses et de statistiques de cours et d'utilisateurs, et d'outils de communication interne.

Déploiement de la base de données PostgreSQL de Canvas LMS

Tout d'abord, déployons un cluster PostgreSQL, qui sera utilisé par l'application Canvas LMS. Pour cela, nous utiliserons ClusterControl pour déployer 3 nœuds PostgreSQL (1 nœud principal et 2 nœuds de secours), et 2 équilibreurs de charge HAProxy avec Keepalived configuré entre eux.

HAProxy est un équilibreur de charge qui répartit le trafic d'une origine vers une ou plusieurs destinations et peut définir des règles et/ou des protocoles spécifiques pour cette tâche. Si l'une des destinations cesse de répondre, elle est marquée comme étant hors ligne et le trafic est envoyé vers le reste des destinations disponibles.

Keepalived est un service qui vous permet de configurer une adresse IP virtuelle au sein d'un groupe de serveurs actif/passif. Cette adresse IP virtuelle est attribuée à un serveur actif. Si ce serveur tombe en panne, l'adresse IP est automatiquement migrée vers le serveur passif "secondaire", lui permettant de continuer à fonctionner avec la même adresse IP de manière transparente pour les systèmes.

Alors, voyons comment implémenter la topologie mentionnée à l'aide de ClusterControl.

Déploiement de la base de données

Pour effectuer un déploiement depuis ClusterControl, sélectionnez simplement l'option "Déployer" et suivez les instructions qui s'affichent.

Lorsque vous sélectionnez PostgreSQL, vous devez spécifier l'utilisateur, la clé ou le mot de passe et le port pour vous connecter en SSH à vos serveurs. Vous pouvez également ajouter un nom pour votre nouveau cluster et si vous souhaitez que ClusterControl installe le logiciel et les configurations correspondants pour vous.

Après avoir configuré les informations d'accès SSH, vous devez définir les informations d'identification de la base de données , version et datadir (facultatif). Vous pouvez également spécifier le référentiel à utiliser.

À l'étape suivante, vous devez ajouter vos serveurs au cluster que vous allez créer à l'aide de l'adresse IP ou du nom d'hôte.

Dans la dernière étape, vous pouvez choisir si votre réplication sera synchrone ou Asynchrone, puis appuyez simplement sur "Déployer"

Une fois la tâche terminée, vous pouvez voir votre nouveau cluster PostgreSQL dans le l'écran principal de ClusterControl.

Maintenant que votre cluster est créé, vous pouvez effectuer plusieurs tâches dessus, comme l'ajout d'un équilibreur de charge (HAProxy) ou d'un nouveau réplica.

Déploiement de l'équilibreur de charge

Pour effectuer un déploiement d'équilibreur de charge, sélectionnez l'option "Ajouter un équilibreur de charge" dans les actions du cluster et complétez les informations demandées.

Vous n'avez qu'à ajouter l'IP ou le nom d'hôte, le port, la stratégie et le nœuds que vous allez utiliser.

Déploiement Keepalive

Pour effectuer un déploiement Keepalived, sélectionnez l'option "Ajouter un équilibreur de charge" dans les actions du cluster, puis accédez à l'onglet Keepalived.

Ici, sélectionnez les nœuds HAProxy et spécifiez l'adresse IP virtuelle qui être utilisé pour accéder à la base de données.

À ce moment, vous devriez avoir la topologie suivante :

Connectons maintenant cet environnement à Canvas LMS pour une haute disponibilité.

Comment configurer Canvas LMS

Tout d'abord, vous devrez l'installer. Il existe différentes façons de le faire, en utilisant une configuration automatisée sur Docker, manuellement ou même en utilisant différentes approches comme QuickStart ou une installation orientée production. Vous pouvez consulter la documentation officielle pour choisir la meilleure méthode pour vous.

Une fois que Canvas LMS est installé, vous pouvez procéder à la configuration du fichier database.yml pour utiliser l'environnement PostgreSQL High Availability que vous venez de déployer.

$ cat config/database.yml

production:

  adapter: postgresql

  encoding: utf8

  database: canvas_production

  host: VIRTUAL_IPADDRESS

  username: CANVAS_USER

  password: CANVAS_PASSWD

  timeout: 5000

Ici, remplacez :

  • VIRTUAL_IPADDRESS pour l'adresse IP virtuelle configurée dans Keepalived

  • CANVAS_USER pour l'utilisateur de la base de données Canvas

  • CANVAS_PASSWD pour le mot de passe de la base de données Canvas

Assurez-vous que vous pouvez accéder à votre base de données en utilisant votre adresse IP virtuelle en tant qu'hôte et qu'elle est autorisée dans le fichier de configuration PostgreSQL pg_hba.conf. Vous pouvez le tester en exécutant la commande suivante depuis votre serveur d'application :

$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production

Fonctionnalité de récupération automatique de ClusterControl

Donc, la question est, en dehors du processus de déploiement, quel est le rôle de ClusterControl ici ?

En cas d'échec, ClusterControl promouvra le nœud de secours le plus avancé en nœud principal et vous informera du problème. Il bascule également sur le reste du nœud de secours pour répliquer à partir du nouveau serveur principal.

Par défaut, HAProxy est configuré avec deux ports différents :lecture-écriture et lecture seule. Dans le port en lecture-écriture, vous avez votre nœud principal en ligne et le reste des nœuds hors ligne, et dans le port en lecture seule, vous avez à la fois le nœud principal et le nœud de secours en ligne.

Lorsque HAProxy détecte qu'un de vos nœuds n'est pas accessible, il le marque automatiquement comme étant hors ligne et ne le prend pas en compte pour lui envoyer du trafic. La détection est effectuée par des scripts de vérification de l'état configurés par ClusterControl au moment du déploiement. Ceux-ci vérifient si les instances sont actives, si elles sont en cours de récupération ou sont en lecture seule.

Lorsque ClusterControl promeut un nœud de secours, HAProxy marque l'ancien nœud principal comme étant hors ligne pour les deux ports et met le nœud promu en ligne dans le port en lecture-écriture.

Si votre HAProxy actif, auquel est attribuée une adresse IP virtuelle à laquelle vos systèmes se connectent, échoue, Keepalived migre automatiquement cette adresse IP vers votre HAProxy passif. Cela signifie que vos systèmes peuvent alors continuer à fonctionner normalement.

Conclusion

Dans ce blog, nous avons parlé de l'importance d'avoir un environnement PostgreSQL haute disponibilité à utiliser avec votre plateforme Canvas LMS, et comment ClusterControl peut vous aider avec les tâches de déploiement et de récupération automatique. Nous avions également mentionné comment améliorer cet environnement en ajoutant HAProxy et Keepalived à des fins de haute disponibilité.