O Plano R*: Implementação técnica

Documentação Técnica: O Livro Laranja.

Nesta seção, pretendemos explicar para os curiosos o mecanismo por trás da nova rede de servidores autistici.org/inventati.org (um projeto conhecido como "Plano R*" :)
O que estamos tentando fazer é descrever a mudança de forma fácil para os interessados nas questões técnicas, não necessariamente especialistas.

Camada zero : hardware
O Plano R* consiste na distribuição de 'n' servidores em 'n' lugares. A idéia básica é que não há jeito de prever com certeza um acesso físico indesejado ao servidor, e que portanto é melhor usar instrumentos que possam detectar quaisquer intrusões não desejadas e avisar sobre quaisquer riscos em um nó da rede.

Camada um : a rede
Você pode imaginar a rede ligando os servidores como uma rede feita de anéis. Cada anel tem regras de acesso diferentes, dependendo do tipo de serviço que oferece. Os anéis são pensados de acordo com a criticalidade de seus serviços, sua banda, local físico de seus servidores e o tipo de hardware deles.
Os servidores são conectados entre si por meio de uma VPN criada utilizando um software chamado tinc. Toda comunicação entre os servidores, de sincronização à roteamento de email, viaja de forma encriptada pela VPN.

Camada dois : a sincronização de nossos serviços
Um dos objetivos básicos do Plano R* é garantir que nenhum serviço seja suspendido caso sejamos forçados a desligar um ou mais nós (por exemplo se um nó for colocado em risco).
Para tornar isto possível, tivemos que desenvolver um mecanismo para sincronizar todos os dados e facilmente redirecionar todas as requisições de um servidor ameaçado para um novo.
Para a sincronização dos serviços, o Plano R* faz uso de diferentes mecanismos:

  • CFengine é um software que permite sincronizar as configurações de diferentes computadores, obtendo tanto uma sincronia nas configurações aplicadas a todos os nós da rede, quanto configurações específicas para cada nó. Além disso, cada nó contém uma cópia de todo o repositório de configurações, e assim todo nó pode dar origem a esta sincronia, tornando possível instalar um servidor de backup tão rapidamente quanto possível.
  • A informação de usuários/as e seus serviços é guardada no banco de dados LDAP junto com alguns dados (por exemplo o virtualhost) relacionados à configuração de serviços específicos. Por motivos de conveniência, arquivos de configuração (como o do apache, por exemplo), são gerados por scripts que coletam as informações necessárias dos bancos de dados LDAP. Os scripts são atualizados e sincronizados através do CFengine.
  • Para lidar com o banco de dados LDAP, usamos uma ferramenta auto-produzida que batizamos de "Oliva".

Camada três : os dados dos/as usuários/as
Com relação aos dados dos usuários e a maioria das seções de dados conectadas aos nossos servidores, não foi possível confiar no CFengine para sua sincronização, devido à grande quantidade de dados que seria necessário transferir inutilmente.
Dados precisando ser sincronizados em mais de um nó (seções de dados de serviços compartilhados, dados de algum usuário, chaves e certificados, etc) são transferidos via rsync. Isto se aplica por exemplo a páginas html distribuí,das em diversas cópias na rede, a serviços de backup, e outras coisas.
Toda caixa de email está localizada fisicamente em um servidor, que foi escolhido de forma a balancear o tráfego da rede. A qualquer momento é possível mover uma caixa de email específica para um servidor diferente, modificando um parâmetro do LDAP. Estes movimentos são completamente transparentes para os usuários afetados. Como em caixas de correio, cada sítio está localizado em um servidor web da rede, e cada sítio pode ser rapidamente movido, recuperando todos os dados de cópias de backup disponíveis em outros servidores da rede.

Camada quatro : usuários/as
Uma das características mais importantes do Plano R* é a localização do usuário: na verdade, o Plano R* implica que todos os usuários estejam contidos em um banco de dados LDAP (um banco concebido para ser tão eficiente quanto possível quando for necessário ler muitas vezes e escrever raramente).
O banco de dados LDAP contém todos os dados do usuário, bem como a informação relacionada aos diferentes serviços ligados cada usuário (o servidor contendo a caixa de email ou o sítio dela, sua senha, etc).

Camada cinco : os serviços
Para entender a implementação do Plano R* de um ponto de vista técnico, você só precisa sacar de que forma os serviços estão distribuídos nos diferentes nós.
Em geral, cada serviço foi concebido de forma a ser distribuído entre todos os n´s (geralmente usando um round robin para ordenar as requisições), e se manter independente de um nó particular. Apesar disso, infelizmente, nem todos os serviços permitem a implementação deste padrão.

Vamos dar uma olhada nos principais serviços:

  • O banco de dados mysql pode ser replicado em todos os computadores. Esta replicação não diz respeito a todas os bancos, mas apenas àqueles que por alguma razão têm de ser mantidos em todos os nós. O banco de dados de um usuário é geralmente mantido somente no servidor onde aquele sítio está hospedado.
  • O servidor web (e portanto o servidor ftp) é configurado para servir nossos domínios em todos os nós. Os sítios dos usuários são distribuídos entre os vários nós, e o redirecionamento é feito automaticamente pelo servidor toda vez que alguém tenta acessar o sítio. Isto significa que o domínio www.autistici.org é resolvido cada vez em um nó diferente da rede, e que cada nó redireciona a requisição para o nó que está hospedando de fato o sítio requisitado.
  • O servidor de saída de emails (smtp) também é configurado independentemente em cada nó. Cada nó pode entregar email e na verdade todo nó recebe a mesma quantidade de mensagens (o campo MX do domínio autistici.org foi configurado para poder enviar mensagens para todos os nós). Cada nó vai então entregar a mensagem para o computador que efetivamente hospeda a caixa de email específica para a qual foi direcionada.
  • As caixas de email dos usuários são distribuídas entre os vários nós. O servidor de entrada de emails foi configurado para servir nossos domínios em todos os nós, e para encaminhar a requisição para o computador correto graças a um proxy (Perdition).
  • Quanto às listas de email, elas ficam todas localizadas em apenas um computador (mesmo que suas configurações sejam copiadas em todos os nós da rede por motivos de segurança: isto permite recobrar rapidamente o serviço de listas de email em caso de emergência): o computador hospedando as listas contém seus arquivos e o sistema de entrega de email relacionado às listas de email.

Em sua maioria, todos os nós da rede servem uma porção dos sítios e uma porção das caixas de email. Se um servidor for aberto por alguém, todas as configurações e as porções de sítios e caixas que usam este hospedeiro serão transferidas para um outro nó, evitando assim uma quebra na comunicação.