Cluster Moodle

Moodle

Introdução

No início de 2020, muitas escolas já disponibilizavam parte das suas disciplinas em formato EAD. Com o surto pandêmico, muitas escolas tiveram que se adaptar rapidamente para minimizar os impactos na educação de seus alunos, passando a prover cem por cento do conteúdo e avaliações, no formato a distância.

Em abril, recebi o contato de uma escola de Brasília, que possui aproximadamente 3000 alunos, para avaliar a estrutura do AVA e propor soluções para ampliação e melhoria do ambiente. Até então, a utilização era bastante tímida, com poucos acessos simultâneos.

Cenário Inicial

O ambiente era composto por apenas um servidor, que executava todos os serviços. Em geral, para ambientes de pequeno porte, essa arquitetura funciona muito bem. No entanto, quando o número de acessos aumenta, surgem problemas de desempenho e torna-se bastante difícil fazer ajustes para uma melhor performance. Na ocasião, várias intervenções foram feitas, inclusive aumentando bastante os recursos do servidor e mesmo assim os problemas persistiram.

Antes de iniciar os trabalhos, alguns testes de Benchmark foram feitos para registro e comparação  posterior. A principal ferramenta para isso foi o plugin Moodle Benchmark, que é capaz de testar a velocidade do servidor, processadores, discos, banco de dados e carregamento de página. Neste caso, a ferramenta gera uma pontuação que, quanto menor, melhor.

Tivemos a pontuação inicial de 947.

Solução Proposta

A primeira proposta seria a separação dos serviços em dois servidores, um para a aplicação e outro para o banco de dados. Isso tornaria bem mais simples distribuir os recursos entre o sistema operacional e os serviços executados em cada máquina.

Neste caso, a escola dispunha de uma ótima infraestrutura em data center, o que nos possibilitou criar um ambiente mais robusto e resiliente a falhas.

Ambiente Moodle

Na solução, propus um ambiente com um Banco de Dados, um servidor NFS, um servidor Redis para cache e gerenciamento de sessão e dois Web Servers, o que nos proporcionaria um ambiente escalável. Para o balanceamento das requisições dos clientes, utilizamos uma solução proprietária provida pelo Data Center mas poderíamos facilmente montar nosso próprio balanceador com o NGINX, por exemplo. Abordarei a construção de um balanceador desse tipo em outro post.

A configuração dos servidores utilizados foi a seguinte:

Web Servers (Apache) 2xBanco da dados (Postgres)Servidor de sessão (Redis)Servidor de arquivos (NFS)
120GB de disco500GB de disco120GB de disco500GB de disco
16GB de memória64GB de memória2GB de memória8GB de memória
8 vCPUs16 vCPUs4 vCPUs8 vCPUs

O sistema operacional utilizado foi o Debian 10. Além disso, o banco de dados foi migrado de MySQL para PostgreSQL porque este, em geral, oferece ao Moodle uma melhor performance quando possuímos tabelas muito grandes. Além disso, MySQL possui sérios problemas quando o tráfego é grande e requer muitas escritas simultâneas. Um bom artigo que explica mais essas questões pode ser encontrado aqui.

O servidor NFS é a solução mais simples para o compartilhamento do moodledata entre os servidores de aplicação. No entanto ele pode trazer muita dor de cabeça se mal configurado ou utilizado para armazenamento de cache e gerenciamento de sessão. Esse problema é facilmente contornado adicionando um servidor Redis na nossa solução. O Redis é uma solução bem simples, que consome poucos recursos e é capaz de evitar overhead de banco de dados ou de discos.

Após todas as instalações e configurações, obtivemos uma pontuação de 125 no Benchmark Moodle.

Nos próximos posts abordaremos todas as instalações e configurações necessárias para montarmos o ambiente descrito acima.

Contato

Samuel Teixeira

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *