As plataformas de Learning Management System (LMS) permitem aprender/ensinar remotamente, algo que é realmente importante devido à situação atual em todo o mundo.
Dito isso, também podemos dizer que a Alta Disponibilidade é uma necessidade neste tipo de plataforma, caso contrário, não poderia ser acessível quando necessário.
Neste blog, veremos como implantar um banco de dados MariaDB para alta disponibilidade a ser usado para uma das opções de plataforma LMS mais populares, Chamilo LMS.
O que é Chamilo?
Chamilo LMS é um Learning Management System (LMS) gratuito projetado para educação online e desenvolvido através da colaboração de muitas empresas e desenvolvedores individuais.
Como professor, usando o Chamilo você pode acessar uma série de ferramentas úteis para criar um ambiente de aprendizagem eficaz. Algumas dessas ferramentas são:
- Importar ou criar documentos (áudio, vídeo, imagens) e publicá-los
- Crie testes e exames com pontuações automatizadas e feedback conforme necessário
- Definir e receber tarefas virtuais
- Descreva os componentes do curso por meio das seções de descrição
- Comunique-se por meio de fóruns ou bate-papo
- Publicar anúncios
- Adicionar links
- Criar grupos de trabalho ou grupos de laboratório
- Configure uma sala de aula virtual
- Criar pesquisas
- Adicione um wiki para criar documentos de forma colaborativa
- Use um glossário e uma agenda
- Ative o rastreamento de alunos em seus cursos
- Registrar presenças
- Elabore um diário de classe e muito mais
A plataforma Chamilo é extremamente flexível. Todas as suas ferramentas podem ser customizadas de acordo com as necessidades de cada curso. Ele fornece uma interface de usuário amigável e intuitiva que não requer nenhum conhecimento ou habilidades técnicas prévias especiais.
Então, a questão é:como você pode implantar um banco de dados MariaDB para alta disponibilidade para ser usado neste sistema?
Banco de dados MariaDB para alta disponibilidade
Existem diferentes abordagens para implantar um banco de dados MariaDB para alta disponibilidade. Vejamos as duas opções principais.
Replicação mestre-escravo MariaDB
Você pode executar uma configuração mestre-escravo usando replicação assíncrona ou semi-síncrona. A vantagem desta opção simples é que, quando o master não estiver disponível, você pode promover um dos slaves e continuar trabalhando normalmente. O principal problema com essa configuração é que o failover precisa ser executado manualmente ou até mesmo usando uma ferramenta externa como o ClusterControl. Isso significa que você terá um tempo de inatividade (curto), o que pode ser aceitável ou não para o seu negócio.
Cluster MariaDB
Outra abordagem seria usar um Galera Cluster para armazenar os dados do Chamilo LMS. Você pode começar a usá-lo com três nós e pode lidar automaticamente com a falha de um desses nós. Os dois nós restantes continuarão trabalhando recebendo conexões do aplicativo Chamilo. Isso significa que você não terá tempo de inatividade nesse caso, mas como é uma topologia mais complexa, você precisará de mais conhecimento sobre essa tecnologia e, dependendo da carga de trabalho, pode não ser a melhor opção.
Balanceadores de carga
Para melhorar a Alta Disponibilidade, ambas as opções exigirão um Load Balancer na frente delas, que manipularia o tráfego e o redirecionaria para um nó disponível/íntegro.
ProxySQL é um balanceador de carga dedicado para MySQL que vem com uma variedade de recursos, incluindo redirecionamento de consulta, cache de consulta e modelagem de tráfego. Ele pode ser usado para configurar facilmente uma divisão de leitura/gravação e redirecionar consultas para nós de back-end separados.
HAProxy é um balanceador de carga que distribui o tráfego de uma origem para um ou mais destinos e pode definir regras e/ou protocolos específicos para esta tarefa. Se algum dos destinos parar de responder, ele será marcado como off-line e o tráfego será enviado para o restante dos destinos disponíveis.
Keepalived é um serviço que permite configurar um endereço IP virtual dentro de um grupo ativo/passivo de servidores. Este endereço IP virtual é atribuído a um servidor ativo. Caso este servidor falhe, o Endereço IP é migrado automaticamente para o servidor passivo “Secundário”, permitindo que ele continue trabalhando com o mesmo Endereço IP de forma transparente para os sistemas.
Usar apenas um nó do Load Balancer adicionará um único ponto de falha em sua topologia, portanto, você pode usar a combinação de ProxySQL+Keepalived ou HAProxy+Keepalived usando dois nós do Load Balancer (pelo menos) e Keepalived entre eles.
Agora, vamos ver como o ClusterControl pode ajudá-lo a implantar um banco de dados MariaDB adicionando Balanceadores de carga e um endereço IP virtual a ser usado em seu aplicativo Chamilo.
Implantação do banco de dados Chamilo MariaDB
Como exemplo, vamos implantar uma Replicação MariaDB Master-Slave, que será usada pelo aplicativo Chamilo. Para isso, usaremos o ClusterControl para implantar 2 nós do Banco de Dados MariaDB (master-slave) e 2 Load Balancers HAProxy com Keepalived configurado entre eles.
Implantação do banco de dados MariaDB
Para realizar um deployment a partir do ClusterControl, basta selecionar a opção “Deploy” e seguir as instruções que aparecem.
Ao selecionar MySQL Replication, você deve especificar User, Key ou Password e Porta para conectar por SSH aos seus servidores. Você também pode adicionar um nome para seu novo cluster e se desejar que o ClusterControl instale o software e as configurações correspondentes para você.
Depois de configurar as informações de acesso SSH, você precisa selecionar o fornecedor do banco de dados /version e defina as credenciais do banco de dados, a porta e o diretório de dados. Você também pode especificar qual repositório usar.
Na próxima etapa, você precisa adicionar seus servidores ao cluster que você criará usando o endereço IP ou o nome do host.
Quando a tarefa for concluída, você poderá ver seu novo cluster MariaDB no tela principal do ClusterControl.
Agora que você criou seu cluster, pode executar várias tarefas nele, como adicionar um Load Balancer ou uma nova réplica.
Implantação do balanceador de carga
Para realizar uma implantação do Load Balancer, selecione a opção “Add Load Balancer” nas ações do cluster e preencha as informações solicitadas.
Você só precisa adicionar IP ou nome de host, porta, política e o nós que você usará para balanceamento de carga. Você pode implantá-lo usando duas portas diferentes (leitura/gravação e somente leitura) ou pode usar apenas uma porta de leitura/gravação para enviar todo o tráfego para lá.
Implantação mantida
Para realizar uma implantação Keepalived, selecione a opção “Add Load Balancer” nas ações do cluster e, em seguida, vá para a aba Keepalived.
Aqui, selecione os nós HAProxy e especifique o endereço IP virtual que ser usado para acessar o banco de dados.
Agora, vamos conectar este ambiente ao aplicativo Chamilo.
Configuração do banco de dados Chamilo
Durante a implantação do Chamilo, na etapa 4, você precisará adicionar a configuração do banco de dados.
Aqui você deve usar o endereço IP virtual para acessar seu banco de dados MariaDB e as credenciais do banco de dados.
Para mais detalhes sobre a configuração do Chamilo você pode consultar a Documentação Oficial.
É isso! Você tem seu aplicativo Chamilo usando um banco de dados MariaDB com alta disponibilidade.
Recurso de recuperação automática do ClusterControl
Em caso de falha, o ClusterControl promoverá o nó escravo mais avançado a mestre, além de notificá-lo sobre o problema. Ele também faz failover do restante dos nós escravos para replicar a partir do novo servidor mestre.
Por padrão, o HAProxy é configurado com duas portas diferentes:leitura-gravação e somente leitura. Na porta de leitura e gravação, você tem o nó mestre como online e o restante dos nós como offline, e na porta somente leitura, você tem os nós mestre e escravo online.
Quando o HAProxy detecta que um de seus nós não está acessível, ele automaticamente o marca como offline e não o considera para enviar tráfego para ele. A detecção é feita por scripts de verificação de integridade configurados pelo ClusterControl no momento da implantação. Eles verificam se as instâncias estão ativas, se estão em recuperação ou são somente leitura.
Quando o ClusterControl promove um nó escravo, o HAProxy marca o mestre antigo como offline para ambas as portas e coloca o nó promovido online na porta de leitura/gravação.
Se o seu HAProxy ativo, ao qual é atribuído um endereço IP virtual ao qual seus sistemas se conectam, falhar, o Keepalived migra esse endereço IP para seu HAProxy passivo automaticamente. Isso significa que seus sistemas podem continuar a funcionar normalmente.
Implantação do banco de dados MariaDB usando a CLI do ClusterControl
Se você preferir implantar o MariaDB Cluster usando a linha de comando, você pode usar a ferramenta cliente de linha de comando ClusterControl chamada "s9s". Essa ferramenta enviará um trabalho de implantação para o servidor ClusterControl e executará todas as etapas necessárias para implantar o cluster.
Por exemplo, você pode executar o seguinte comando no servidor ClusterControl para criar uma replicação mestre-escravo MariaDB:
$ s9s cluster --create \
--cluster-type=mysqlreplication \
--nodes='10.10.10.136;10.10.10.137' \
--vendor=mariadb \
--provider-version='10.5' \
--db-admin-passwd='root123' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='MariaDB1' \
--log
Você verá o log de trabalho no console para que possa monitorar o progresso da implantação lá ou também pode monitorar o progresso do trabalho de ClusterControl UI -> Activity -> Jobs. Quando terminar, você poderá vê-lo listado na interface do usuário do ClusterControl.
Conclusão
Neste blog, mencionamos algumas opções para implantar um banco de dados MariaDB para alta disponibilidade usando ClusterControl e como usá-lo em um aplicativo Chamilo LMS.
Usamos uma implantação mestre-escravo simples adicionando balanceadores de carga para melhorar a alta disponibilidade nessa topologia, mas você pode melhorar ainda mais esse ambiente usando uma abordagem diferente, como Galera+ProxySQL ou uma combinação diferente delas .