Nestes tempos de pandemia, as plataformas Learning Management System (LMS) estão se tornando cada vez mais importantes para permitir que você continue aprendendo remotamente quando o sistema educacional tradicional simplesmente não estiver mais disponível.
Ter uma plataforma LMS sem Alta Disponibilidade pode ser um problema em caso de falha, pois todos os seus esforços para manter o sistema funcionando não farão sentido sem ter o banco de dados disponível o tempo todo.
Neste blog, veremos um aplicativo LMS popular chamado Canvas LMS e como implantá-lo de maneira de alta disponibilidade usando PostgreSQL e ClusterControl.
O que é Canvas?
Canvas é um Learning Management System (LMS) baseado na web. Ele é usado por instituições de ensino, educadores e alunos para acessar e gerenciar materiais de aprendizado de cursos on-line e comunicar sobre desenvolvimento de habilidades e conquistas de aprendizado.
O Canvas inclui uma variedade de ferramentas personalizáveis de criação e gerenciamento de cursos, análises e estatísticas de cursos e usuários e ferramentas de comunicação interna.
Implantação do banco de dados do Canvas LMS PostgreSQL
Primeiro, vamos implantar um PostgreSQL Cluster, que será usado pelo aplicativo Canvas LMS. Para isso, usaremos o ClusterControl para implantar 3 nós PostgreSQL (1 nó Primário e 2 nós Standby), e 2 Load Balancers HAProxy com Keepalived configurado entre eles.
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.
Então, vamos ver como implementar a topologia mencionada usando ClusterControl.
Implantação de banco de dados
Para realizar um deployment a partir do ClusterControl, basta selecionar a opção “Deploy” e seguir as instruções que aparecem.
Ao selecionar PostgreSQL, você deve especificar Usuário, Chave ou Senha e Porta para se 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 definir as credenciais do banco de dados , versão e datadir (opcional). 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.
Na última etapa, você pode escolher se sua replicação será síncrona ou Assíncrono e, em seguida, basta pressionar “Implantar”
Quando a tarefa for concluída, você poderá ver seu novo cluster PostgreSQL no tela principal do ClusterControl.
Agora que você criou seu cluster, pode executar várias tarefas nele, como adicionar um balanceador de carga (HAProxy) ou uma nova réplica.
Implantação do balanceador de carga
Para realizar uma implantação do balanceador de carga, selecione a opção “Adicionar balanceador de carga” 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ê vai usar.
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.
Neste momento, você deve ter a seguinte topologia:
Agora, vamos conectar este ambiente ao Canvas LMS para alta disponibilidade.
Como configurar o Canvas LMS
Primeiro, você precisará instalá-lo. Existem diferentes maneiras de fazer isso, usando uma configuração automatizada no Docker, manualmente ou até mesmo usando diferentes abordagens, como QuickStart ou instalação Orientada à Produção. Você pode verificar a documentação oficial para escolher o melhor método para você.
Depois de instalar o Canvas LMS, você pode continuar a configurar o arquivo database.yml para usar o ambiente de alta disponibilidade do PostgreSQL que acabou de implantar.
$ cat config/database.yml
production:
adapter: postgresql
encoding: utf8
database: canvas_production
host: VIRTUAL_IPADDRESS
username: CANVAS_USER
password: CANVAS_PASSWD
timeout: 5000
Aqui, substitua:
-
VIRTUAL_IPADDRESS para endereço IP virtual configurado no Keepalived
-
CANVAS_USER para o usuário do banco de dados Canvas
-
CANVAS_PASSWD para a senha do banco de dados Canvas
Certifique-se de que você pode acessar seu banco de dados usando seu endereço IP virtual como host e isso é permitido no arquivo de configuração pg_hba.conf PostgreSQL. Você pode testá-lo executando o seguinte comando em seu servidor de aplicativos:
$ psql -h VIRTUAL_IPADDRESS -U CANVAS_USER canvas_production
Recurso de recuperação automática do ClusterControl
Então, a questão é, além do processo de implantação, qual é o papel do ClusterControl aqui?
Em caso de falha, o ClusterControl promoverá o nó de espera mais avançado para primário, além de notificá-lo sobre o problema. Ele também faz failover do restante do nó em espera para replicar a partir do novo servidor primário.
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 seu nó primário como online e o restante dos nós como offline, e na porta somente leitura, você tem os nós primário e de espera 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ó em espera, o HAProxy marca o primário 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.
Conclusão
Neste blog, falamos sobre a importância de ter um ambiente PostgreSQL de alta disponibilidade para usar com sua plataforma Canvas LMS e como o ClusterControl pode ajudá-lo nas tarefas de implantação e recuperação automática. Também mencionamos como melhorar esse ambiente adicionando HAProxy e Keepalived para fins de alta disponibilidade.