Otimizando a arquitetura de servidores com Apache / Varnish / MySQL no Linux

6

Eu sou um administrador de servidores para uma pequena start-up como um empreendimento paralelo (o que significa que não sou um especialista experiente no assunto) e recentemente ajudei a mover o site de uma única máquina Windows para um cluster de máquinas na Rackspace Cloud.

Atualmente, o site faz benchmarks com cerca de 600 solicitações / segundo, mas, considerando a quantidade de recursos que alocamos, acho que poderia ser muito maior.

Neste momento, estamos usando o Rackspace Cloud Load Balancer (Apache Zeus) na frente de oito servidores da web. Cada servidor da Web está executando o Linux em uma instância de nuvem de 512 MB e o conteúdo está sendo servido pelo Varnish com um back-end do Apache 2.

O aplicativo da web em si é PHP. O Apache está rodando no mpm-worker, e o php está rodando no fcgi. O PHP APC também está ativado.

Quanto ao backend do banco de dados, tenho duas instâncias do servidor de 4GB servindo o MySQL em uma configuração de replicação do Master-Master com metade dos servidores da web apontando para cada servidor. O aplicativo é bastante intensivo em banco de dados, tendo assim muitos recursos dedicados ao banco de dados.

O desempenho normalmente é bom, no entanto, tivemos alguns picos de carga que a infraestrutura existente não conseguiu manipular, então aumentamos dinamicamente o tamanho dos nós. Isso funcionou muito bem, mas sinto que, sob as condições específicas de carga que tínhamos, tive que lançar muito mais recursos na infraestrutura do que eu esperava para manter o site alto e rápido. Na minha pesquisa, parece que estamos usando uma configuração muito incomum no que diz respeito a ter tantas instâncias separadas de verniz, e talvez eu precise explorar a opção de uma camada de cache.

Uma visão geral da arquitetura atual é desenhada aqui (link do Google Docs)

O modelo de precificação da nuvem rackspace é bastante linear, o que significa que uma instância do servidor de 1024 MB é exatamente o dobro do custo de uma instância de 512 MB. Como tal, estou procurando maximizar meu desempenho enquanto trabalho dentro da mesma quantidade de recursos (custo).

Meu pensamento inicial é remover o balanceador de carga rackspace em favor de usar uma única instância de verniz na frente dos back-ends do apache e talvez tornar o backend do apache 4x 1gb instâncias em vez de 8x 512mb instâncias. O custo do balanceador de carga é extremamente barato, então, para justificar sua substituição por outro servidor dedicado, o ganho de desempenho precisaria ser grande.

Também brinquei com a idéia de HAProxy e Nginx, mas não quero começar a experimentar cegamente em um site de produção.

Meu objetivo é poder atuar o mais próximo de 2000 req / s em praticamente a mesma alocação de hardware.

Edit: Eu tive o mod_pagespeed funcionando por um tempo, o que me deu cerca de 100 req / s, mas eu parecia ter muitos problemas com a forma como ele interagia com o verniz.

Editar: Varnish VCL , o disco é o padrão Rackspace Cloud (não-san, supondo SATA), banco de dados é aproximadamente 1.5gb atualmente. Não trocar para o disco em condições normais. Os processos do Apache são de aproximadamente 20 MB cada. Os processos php-cgi tendem a consumir muito mais recursos.

    
por WerkkreW 09.09.2011 / 20:20

2 respostas

1

Gostaria de ir com uma alta RAM (verificar o uso de verniz RAM usando as ferramentas de verniz e aumentar até bem) Instâncias de verniz e sem balanceador de carga (ou dois vernizes e balanceador de carga que você deseja alta disponibilidade) e quantos servidores apache forem necessários ... se o seu aplicativo estiver ligado à CPU (mais servidores) ou vinculado à RAM (servidores com maior MEM) depende de você.

Também jogando com as configurações de cache (o que pode ser descontado por quanto tempo) vai ajudar.

    
por 09.09.2011 / 21:30
2

OP, você pode usar o link para uma marcação gratuita. Além disso, olhe para o 'ab' e 'httperf' para algumas ferramentas de marcação de linha de comando.

O verniz pode ser usado com grande sucesso com configuração mínima. Além disso, se você usa aplicativos pesados do PHP, recomendo instalar o APC.

    
por 06.08.2012 / 06:46