Servidor VPS com OpenVZ

openvz-logo-150px_new_4Esta última semana foi muito intensa. Novos clientes surgiram com uma demanda incomum: escalabilidade para sites de conteúdo.

Os clientes são portais de notícias regionais da Paraíba e o seu volume de acessos quadruplicou nos últimos anos, provocando instabilidade e lentidão nos acessos. A fórmula básica de instalar um WordPress em um servidor com configuração mais generosa já não resolvia o problema. Chega um momento em que não adianta ter RAM demais e cores extras se eles não forem utilizados 100%.

Estruturas monolíticas tem capacidade limitada de responder a muitas requisições, mesmo que a maquina seja poderosa. É uma questão de enfileiramento e é para isso que os serviços de VPS, Proxy reverso e balanceamento de carga entram em cena: forçar o uso máximo do hardware e permitir escalabilidade.

Tecnologias utilizadas

Neste cenário usamos as seguintes tecnologias:

  • OpenVZ para servidor VPS;
  • HA Proxy para proxy e balanceamento de carga
  • Nginx + PHP5-fpm como servidor HTTP
  • Mount bind para compartilhamento de arquivos

Descrição do fluxo

As requisições chegam na porta 80 (HTTP) e são atendidas pelo HA Proxy que verifica se a página está em seu cache ou não. Se estiver ele fornece o conteúdo sem requisitar nada dos servidores internos. Isso faz dele uma super ferramenta que reduz drasticamente o consumo de recursos computacionais. Se a página não estiver em cache ele faz a solicitação para um dos servidores internos. Mas essa solicitação é feita de forma inteligente e balanceada para não sobrecarregar apenas um.

Internamente há varias maquinas virtuais ou VPS’s que foram criadas com o servidor OpenVZ. Estas maquinas tem configurações similares e isolam várias instalações do WordPress e outras do MySQL. Neste cenário são 8 máquinas virtuais que respondem às requisições, sendo 6 com WordPress e duas com Mysql.

As VPS’s tem a mesma configuração e os mesmos softwares instalados: Nginx+PHP5-Fpm, além de todas as dependências para que o WordPress funcione.

O conteúdo a ser mostrado, ou seja, o próprio WordPress está gravado na maquina hospedeira e é compartilhado via a montagem linkada para cada uma das VPS’s, usando-se a opção bind do comando mount. O OpenVZ tem uma forma própria de fazer isso e que está bem documentada no wiki do projeto. Dessa forma, uma alteração qualquer de configuração ou adição de um plugin, por exemplo, ganha efeito imediato para todas as VPS’s. Importante lembrar que todas elas usam o mesmo servidor MySQL que está instalado em uma outra VPS’s.

O resultado final é estonteante. Onde antes o servidor não era capaz de atender as solicitações agora ela sobra e está pronta para atender mais que o triplo de requisições.

O layout é como descreve a figura abaixo apesar de termos usado o “layer 7”.

Tutorial para começar

Observações:

  • A distribuição escolhida foi Debian;
  • Não usamos o glusterfs por problemas de performance.

Portais

Links

Agradecimentos

Quero agradecer imensamente os amigos João Gabriel e Rodolfo Pilas pela ajuda, inspiração e especialmente aquelo olho clínico para apontar as vírgulas e espaços fora do lugar.

Saudações Livres!