Chamilo es, al igual que Open edX o Moodle, una plataforma que permite a las instituciones educativas trasladar sus actividades educativas a internet. Dado que la mayor parte de la actividad educativa se ha movido en línea en el último año, no sorprende que veamos a más y más personas luchando por escalar sus plataformas educativas y garantizar una mejor disponibilidad.
Chamilo es una plataforma construida sobre la pila *AMP, que consta de Apache, MySQL y PHP. Como es habitual, la base de datos es el elemento más difícil de migrar a un entorno de alta disponibilidad. En este breve blog nos gustaría analizar cómo puede mejorar la alta disponibilidad de la base de datos de Chamilo.
Como puede imaginar, la única base de datos MySQL es un único punto de falla y, como tal, debe evitarse en las implementaciones de producción. Afortunadamente, hay un par de formas en las que puede mejorar la disponibilidad de la base de datos MySQL.
Una de las formas en que puede abordar el problema sería utilizar un Galera Cluster. La implementación mínima debe constar de tres nodos:dichos clústeres pueden manejar automáticamente la falla de un solo nodo. Los dos nodos restantes seguirán funcionando y responderán a las consultas provenientes de la aplicación.
Esta configuración requeriría algún tipo de equilibrador de carga frente al clúster de Galera. Su trabajo sería manejar el tráfico y redirigirlo a un destino adecuado.
Veamos cómo ClusterControl puede ayudarlo a implementar un Galera Cluster con un conjunto de balanceadores de carga que puede usar para su plataforma Chamilo.
Implementación del clúster de MariaDB
Esta vez intentaremos usar MariaDB Cluster como nuestro backend. Chamilo admite MySQL 5.6 y posteriores o MariaDB 5.5 y posteriores. Como primer paso, debemos elegir "Implementar" en el asistente:
Una vez que hagamos eso, tenemos que definir la conectividad SSH, sin contraseña, clave El acceso SSH basado en SSH es un requisito para ClusterControl; de lo contrario, no podrá administrar la infraestructura de la base de datos:depende de la conectividad SSH para ejecutar comandos para iniciar o detener servicios, instalar software, etc.
Luego debemos decidir sobre el proveedor, la versión, la contraseña, los hosts y algunos configuraciones adicionales:
Con todos esos detalles completos, estamos listos para continuar con la implementación.
Implementación de ProxySQL
Como mencionamos anteriormente, la base de datos en sí no es el único elemento que queremos implementar. Podríamos usar un balanceador de carga que usaremos para mover el tráfico si uno de los nodos falla. También lo usaremos para proporcionar división de lectura/escritura, dirigiendo todas las escrituras a un único nodo de MariaDB Galera y dividiendo las lecturas entre los nodos de MariaDB Galera restantes. Esto nos ayudará a evitar conflictos entre las escrituras ejecutadas en diferentes nodos de Galera.
Para ProxySQL ClusterControl también es necesario completar cierta información; debe elegir el host para instalarlo, decida la versión de ProxySQL, las credenciales para los usuarios administrativos y de monitoreo. Esos usuarios se utilizarán para administrar ProxySQL y monitorear el estado de su clúster de Galera. También debe importar usuarios de bases de datos existentes o crear uno nuevo para su aplicación. Finalmente, depende de usted decidir qué nodos de base de datos desea usar con ProxySQL y decidir si usa transacciones implícitas.
Implementación de Keepalived
ProxySQL funcionará muy bien distribuyendo nuestro tráfico a través de los nodos del clúster. Por otro lado, un solo nodo ProxySQL actuará como un único punto de falla. Por lo tanto, queremos implementar al menos dos de ellos. Entonces, la pregunta es cómo detectar la falla del nodo ProxySQL y cómo mover el tráfico a un ProxySQL saludable. Aquí viene Keepalived. La idea aquí es tener una IP virtual que apunte a la instancia de ProxySQL en funcionamiento. Dicho VIP se puede usar en la aplicación como punto final para la conectividad de la base de datos MySQL, lo que garantiza que la aplicación siempre llegue a un ProxySQL en buen estado que, a su vez, garantizará que el tráfico llegue al nodo del clúster en buen estado.
Después de pasar detalles como las instancias de ProxySQL que deben monitorearse, la IP virtual y el La interfaz VIP debe vincularse a Estamos listos para implementar. Después de un par de minutos, todo debería estar listo y la topología debería verse como a continuación:
Eso es todo cuando se trata del entorno que estábamos construyendo. Puede apuntar su Chamilo hacia el VIP y el puerto 6033, esto debería ser suficiente para obtener la conectividad a su base de datos backend. Si se encuentra con algún problema relacionado con lecturas obsoletas (cuando la escritura llega a un nodo y luego Chamilo intenta leer desde otro nodo), puede habilitar las verificaciones de causalidad en el clúster de Galera. Hay una variable wsrep_sync_wait que puede habilitar las pruebas en varios accesos. patrones:lecturas, actualizaciones, insertos, borrados, reemplazos y comandos SHOW.Si nos interesan solo las consultas SELECT, pondremos esta variable a '1' usando la gestión de configuración de ClusterControl.
Esto realizará este cambio en todos los nodos del clúster de MariaDB.
Eso es todo. Si desea compartir algo de su experiencia con Chamilo, puede dejarnos un comentario.