Considerações sobre Ambientes Distribuídos

Este documento visa trazer considerações sobre ambientes distribuídos e a aplicação Nextcloud.

Nextcloud em ambientes distribuídos

O Nextcloud é uma aplicação que precisa de, no mínimo:

  1. Armazenamento de arquivos

  2. Banco de dados

  3. Servidor web

  4. Linguagem de interpretação (PHP)

Consulte a página de requisitos para se familiarizar. (https://docs.nextcloud.com/server/latest/admin_manual/installation/system_requirements.html)

Tecnologias de Sincronização

Em se tratando de sincronização de dados, após realizar pesquisas, optou-se por realizar testes com GlusterFS e GarageS3.

GlusterFS foi escolhido por sua natureza descentralizada, diferentemente do CEPH que armazena os meta-dados num servidor centralizado. Além disso, ambas tecnologias apresentam maturidade desejável.

GarageS3 foi escolhido por sua natureza inovadora, de maneira a prover um software capaz de poder ser utilizado em hardware de baixo custo/não confiável e por ter uma natureza distribuída como princípio.

Nota

O software MinIO não foi escolhido pois não possui natureza distribuída.

Visto que o Nextcloud tem a opção utilizar buckets como armazenamento primário, poderia-se utilizar o provedor de armazenamento em nuvem Wasabi, o qual oferece a possibilidade de replicar os buckets em diferentes regiões. Todavia o mesmo provedor não oferece serviços no Brasil.

Banco de Dados Distribuído

Outro aspecto a ser levado em conta é o banco de dados: é necessário fazer a replicação em tempo real.

Existem soluções como MariaDB Galera Cluster e Autobase que fornecem uma interface gráfica para fazer a instalação e configuração de novos clusters.

Também existe o Patroni, o qual é um template para clusters de Postgres, implementando protocolo de consenso (ETCD, por exemplo) banco de dados Postgres.

Optou-se pela replicação nativa, afim de melhor exemplificar.

Coordenação Distribuída

Quando fala-se de sistema distribuído, é necessário a utilização de ferramentas como o etcd, o qual é um armazenamento chave-valor distribuído e altamente disponível, amplamente utilizado em sistemas distribuídos para armazenamento de configurações compartilhadas, descoberta de serviços e coordenação entre nós.

O etcd atua em conjunto com o Patroni, de maneira a garantir que a aplicação apenas escreva no servidor primário.

A topologia com dois datacenters para fazer o cluster de banco de dados fica da seguinte maneira:

Topologia de dois datacenters, onde um dos dois fica em espera recebendo atualizações do primário, e, torna-se primário em caso de falhas

Fonte: https://patroni.readthedocs.io/en/latest/ha_multi_dc.html

Configurações necessárias a nível de DNS

Entrada tipo A apontando para o IP da aplicação Cenário 1: Provedor de DNS sem suporte a certificados wildcard Cenário 2: Provedor de DNS com suporte a certificados wildcard

Certificados Wildcard

  • Caso o provedor não suporte certificados wildcard, será necessário, quando a aplicação no Datacenter primário estiver comprometida, adicionar o IP do servidor 2 à entrada tipo A existente.

  • Se o provedor DNS suportar certificados wildcard, o mesmo deverá ser copiado para os demais servidores após a requisição no servidor 1.

Balanceamento de carga em ambientes distribuídos

  • Por se tratar de um setup primário/secundário, o balanceamento de carga entre datacenters não será habilitado.

  • O que pode ser habilitado é o balanceamento de carga dentro de cada datacenter em questão, a depender dos recursos computacionais disponíveis.

Ferramentas para backup e recuperação em caso de desastres

A ferramenta utilizada para backup (em servidor diferente do cluster) é o Duplicati.

Soluções de armazenamento de backup

O provedor Wasabi é o escolhido para armazenamento em objetos. De maneira que o backup será criptografado, não há problema em utilizar provedor externo. Outra opção é utilizar o MinIO, software livre que permite a criação de um ambiente compatível com o protocolo S3.

Aviso

A única ressalva é a latência do link de internet para restaurar o backup, o que pode demorar.

Ferramentas para monitoramento da infraestrutura

A ferramenta Zabbix será utilizada afim de monitorar a infraestrutura.

Outras utilitários de linha de comando também podem ser utilizados, tais quais:

htop - mostra os processos que estão em execução
iotop - mostra escrita em disco de cada processo

Levantamento de ferramentas para infraestrutura como código

Quando se é utilizado o virtualizador Proxmox, logo, poder-se-ia utilizar a ferramenta OpenTofu para instanciar novas máquinas.

Todavia, será utilizado o Ansible para automatizar tarefas de maneira geral.

Ferramentas de interconexão utilizando redes definidas por software

Em estudo se será necessário.

Diagramação da arquitetura proposta

Abaixo está o diagrama da arquitetura proposta:

Considerações

Limitações com 2 Data Centers

Utilizando 2 data centers para a redundância requer intervenção manual para fazer a ativação do servidor secundário. Isso ocorre pois uma das limitações é que com apenas 2 nós não é possível utilizar o etcd para fazer a eleição de um líder.

Ambiente com Alta Disponibilidade em 3 Data Centers

Ambiente com 3 datacenters

Fonte: https://patroni.readthedocs.io/en/latest/ha_multi_dc.html

Próximos passos —

O próximo passo é realizar configurações no sistema hospedeiro, de maneira a deixá-lo apto para a instalação da aplicação.