O que o vSphere faz:
- Clustering - DRS = executando várias VMs em mais de um host, o vSphere decidirá automaticamente em qual host mover a VM em execução
- Alta disponibilidade = executando guest em mais de um host em paralelo - se um cair - segundo um garante disponibilidade de serviço
Clusterização do MySQL - não é fácil, não é possível descrever detalhes aqui, mas geralmente:
- Depende do DB Engine (MyISAM, InnoDB, XtraDB)
- Muito limitado
- Armazenamento compartilhado - na maioria das vezes não é possível
- Mais fácil de implementar nós de gravação única e de leitura múltipla com replicação
Balanceamento de carga do Apache / web, configuração ideal:
- Nível de rede - balanceamento de carga TCP, requer pelo menos 1 nó balanceador para operação normal, 2 para HA (backup ativo). Implementado através do módulo de kernel Linux Virtual Server (LVS) :
- GUI da Piranha (RHEL e Fedora) (suficiente, fácil de implementar)
- Mantido em atividade
- UltraMonkey
- Linux-HA
- Nível do SO - configuração de rede, gateway, configuração de ARP (LVS-DR), atribuindo IPs globais ao host local (127.0.0.1 - LVS-NAT).
- Nível de aplicativo
- Nível do Apache - sem alterações, mantenha-o em execução na porta 80, para que os aplicativos possam se ver (solicitações de loopback)
- Nível do PHP - as sessões, tmp, também devem ser compartilhadas entre os nós
- Use o mysql-proxy em execução no modo de escuta do soquete e da porta, encaminhando pedidos para o servidor mysql
- Nível de armazenamento - os dados entre os servidores da web devem ser compartilhados com algo muito rápido, como o GlusterFS
O desempenho do LVS é bastante alto - ele é de 1,6 GHz dual-core no nível do kernel, pode executar mais do que o gigabit no modo NAT e evitar muitos problemas no nível da rede. O IP virtual será obtido em L2 pelo servidor LB e as solicitações serão encaminhadas pelo kernel para o IP do servidor, que pode ter o mesmo IP (LVS-DR) ou com NAT (LVS-NAT). O LVS-DR requer configuração específica de arp nos lados do servidor, porque todos os servidores estarão executando com o mesmo IP. A implementação do LVS-NAT é mais fácil e você pode balancear a carga de tudo o que quiser em qualquer servidor. Para trabalhar com o LVS-NAT normalmente, use o kernel 2.6.37 ou posterior. O balanceador também pode atuar como gateway e firewall. A persistência da conexão deve ser definida para evitar alguns problemas (consulte Documentos do LVS) e os tempos limite do TCP do kernel devem ser definidos para valores mínimos. Você também deve escrever scripts para verificar a disponibilidade do host - se estiver funcionando bem ou não. Tente ter 100% de configuração igual nos nós da web.
Globalmente - é uma arquitetura muito boa, muito eficiente e ideal, mas exigirá alguns ajustes depois. Gargalo é resposta de armazenamento e mysql. O php-apache HA / Balancing está funcionando idealmente.
Squid, mod_proxy_balancer, HAproxy etc são aplicativos no nível do usuário, ineficazes e idiotas:
- O Squid pode ser usado como proxy ou proxy reverso (melhor usar o verniz) para Finalização HTTP ou / e segurança - filtro. Você pode adicioná-lo em cada servidor da Web e encaminhar solicitações internamente para ocultar as informações do servidor da Web, etc. Além disso, precisará do mod_extract_forwarded para manter os IPs de origem corretamente identificados pelo servidor da Web e pelo aplicativo.
- mod_proxy_balancer apenas outro "não tinha nada para fazer - eu escrevi módulo apache" coisa nesta situação.
- haproxy é uma coisa muito estúpida - aplicativo ouvindo a porta e iniciando solicitações para backend - eu odeio isso.
Você pode jogar com o conjunto de clusters RedHat e obter algumas melhorias para o compartilhamento de arquivos (GFS2 etc), ter o HA do aplicativo lá, mas vai exigir mais esforço do seu lado.
Para o nó balanceador - recomendo estritamente o Fedora 15 ou posterior (kernel mais recente - melhor). Para mais - o que você quiser, até mesmo o Windows (mas terá alguns problemas com o acesso loopback http).
Além disso, recomendo que você use a vinculação baseada em LACP nos lados da Web de armazenamento.