sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo implementar un Canvas LMS de alta disponibilidad con un clúster de base de datos de PostgreSQL

En estos tiempos de pandemia, las plataformas del Sistema de gestión de aprendizaje (LMS) son cada vez más importantes para permitirle continuar aprendiendo de forma remota cuando el sistema educativo tradicional ya no está disponible.

Tener una plataforma LMS sin Alta Disponibilidad podría ser un problema en caso de falla, ya que todos sus esfuerzos para mantener el sistema funcionando no tendrán sentido sin tener la base de datos disponible en todo momento.

En este blog, veremos una popular aplicación LMS llamada Canvas LMS y cómo implementarla de manera de alta disponibilidad usando PostgreSQL y ClusterControl.

¿Qué es Canvas?

Canvas es un sistema de gestión de aprendizaje (LMS) basado en la web. Es utilizado por instituciones de aprendizaje, educadores y estudiantes para acceder y administrar materiales de aprendizaje de cursos en línea y comunicar sobre el desarrollo de habilidades y logros de aprendizaje.

Canvas incluye una variedad de herramientas personalizables de creación y administración de cursos, análisis y estadísticas de cursos y usuarios, y herramientas de comunicación interna.

Implementación de la base de datos PostgreSQL de Canvas LMS

Primero, implementemos un clúster de PostgreSQL, que será utilizado por la aplicación Canvas LMS. Para esto, usaremos ClusterControl para implementar 3 nodos PostgreSQL (1 principal y 2 en espera) y 2 balanceadores de carga HAProxy con Keepalived configurado entre ellos.

HAProxy es un balanceador de carga que distribuye el tráfico desde un origen a uno o más destinos y puede definir reglas y/o protocolos específicos para esta tarea. Si alguno de los destinos deja de responder, se marca como desconectado y el tráfico se envía al resto de destinos disponibles.

Keepalived es un servicio que le permite configurar una dirección IP virtual dentro de un grupo activo/pasivo de servidores. Esta dirección IP virtual se asigna a un servidor activo. Si este servidor falla, la dirección IP se migra automáticamente al servidor pasivo "Secundario", lo que le permite continuar trabajando con la misma dirección IP de forma transparente para los sistemas.

Entonces, veamos cómo implementar la topología mencionada usando ClusterControl.

Despliegue de base de datos

Para realizar un deployment desde ClusterControl, simplemente seleccione la opción “Deploy” y siga las instrucciones que aparecen.

Al seleccionar PostgreSQL, debe especificar Usuario, Clave o Contraseña y Puerto para conectarse por SSH a sus servidores. También puede agregar un nombre para su nuevo clúster y si desea que ClusterControl instale el software y las configuraciones correspondientes por usted.

Después de configurar la información de acceso SSH, debe definir las credenciales de la base de datos , versión y datadir (opcional). También puede especificar qué repositorio usar.

En el siguiente paso, debe agregar sus servidores al clúster que va a crear utilizando la dirección IP o el nombre de host.

En el último paso, puede elegir si su replicación será Síncrona o Asíncrono, y luego simplemente presione "Implementar"

Una vez finalizada la tarea, puede ver su nuevo clúster de PostgreSQL en la pantalla principal de ClusterControl.

Ahora que ha creado su clúster, puede realizar varias tareas en él, como agregar un balanceador de carga (HAProxy) o una nueva réplica.

Implementación del equilibrador de carga

Para realizar una implementación del balanceador de carga, seleccione la opción "Agregar balanceador de carga" en las acciones del clúster y complete la información solicitada.

Solo necesita agregar IP o nombre de host, puerto, política y el nodos que va a utilizar.

Implementación mantenida

Para realizar una implementación de Keepalived, seleccione la opción "Agregar Load Balancer" en las acciones del clúster y luego vaya a la pestaña Keepalived.

Aquí, seleccione los nodos HAProxy y especifique la dirección IP virtual que utilizarse para acceder a la base de datos.

En este momento, debería tener la siguiente topología:

Ahora, conectemos este entorno a Canvas LMS para alta disponibilidad.

Cómo configurar Canvas LMS

Primero, deberá instalarlo. Hay diferentes formas de hacerlo, utilizando una configuración automatizada en Docker, manualmente o incluso utilizando diferentes enfoques como QuickStart o instalación orientada a la producción. Puede consultar la documentación oficial para elegir el mejor método para usted.

Una vez que haya instalado Canvas LMS, puede proceder a configurar el archivo database.yml para usar el entorno de alta disponibilidad de PostgreSQL que acaba de implementar.

$ cat config/database.yml

production:

  adapter: postgresql

  encoding: utf8

  database: canvas_production

  host: VIRTUAL_IPADDRESS

  username: CANVAS_USER

  password: CANVAS_PASSWD

  timeout: 5000

Aquí, reemplaza:

  • VIRTUAL_IPADDRESS para la dirección IP virtual configurada en Keepalived

  • CANVAS_USER para el usuario de la base de datos de Canvas

  • CANVAS_PASSWD para la contraseña de la base de datos de Canvas

Asegúrese de que puede acceder a su base de datos utilizando su dirección IP virtual como host y que está permitido en el archivo de configuración de PostgreSQL pg_hba.conf. Puede probarlo ejecutando el siguiente comando desde su servidor de aplicaciones:

$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production

Función de recuperación automática de ClusterControl

Entonces, la pregunta es, además del proceso de implementación, ¿cuál es el rol de ClusterControl aquí?

En caso de falla, ClusterControl promoverá el nodo de reserva más avanzado a principal y le notificará el problema. También falla el resto del nodo en espera para replicar desde el nuevo servidor principal.

De forma predeterminada, HAProxy está configurado con dos puertos diferentes:lectura-escritura y solo lectura. En el puerto de lectura y escritura, tiene su nodo principal en línea y el resto de los nodos fuera de línea, y en el puerto de solo lectura, tiene en línea tanto el nodo principal como el de reserva.

Cuando HAProxy detecta que uno de sus nodos no es accesible, lo marca automáticamente como fuera de línea y no lo tiene en cuenta para enviarle tráfico. La detección se realiza mediante secuencias de comandos de comprobación de estado configuradas por ClusterControl en el momento de la implementación. Estos comprueban si las instancias están activas, si se están recuperando o si son de solo lectura.

Cuando ClusterControl promueve un nodo en espera, HAProxy marca el principal anterior como fuera de línea para ambos puertos y pone el nodo promovido en línea en el puerto de lectura y escritura.

Si su HAProxy activo, al que se le asigna una dirección IP virtual a la que se conectan sus sistemas, falla, Keepalived migra esta dirección IP a su HAProxy pasivo automáticamente. Esto significa que sus sistemas podrán continuar funcionando normalmente.

Conclusión

En este blog, hablamos sobre la importancia de tener un entorno PostgreSQL de alta disponibilidad para usar con su plataforma Canvas LMS y cómo ClusterControl puede ayudarlo con las tareas de implementación y recuperación automática. También mencionamos cómo mejorar este entorno agregando HAProxy y Keepalived para fines de alta disponibilidad.