A solução que uso e pode ser facilmente implementada com o VPS é a seguinte:
- O DNS é arredondado (sp?) para 6 endereços IP válidos diferentes.
- Eu tenho 3 balanceadores de carga com configuração idêntica e usando o corosync / pacemaker para distribuir uniformemente os 6 endereços IP (para que cada máquina receba 2 endereços).
- Cada um dos balanceadores de carga tem um nginx + verniz configuração. O Nginx lida com o recebimento das conexões e reescreve e alguma veiculação estática, e passa de volta para o Varnish que faz o balanceamento de carga e o armazenamento em cache.
Este arco tem as seguintes vantagens, na minha opinião tendenciosa:
-
O
- corosync / pacemaker redistribuirá os endereços IP caso um dos LB falhe.
- nginx pode ser usado para servir SSL, certos tipos de arquivos diretamente do sistema de arquivos ou NFS sem usar o cache (grandes vídeos, arquivos de áudio ou grandes).
- O verniz é um balanceador de carga muito bom que suporta peso, verificação de integridade de back-end e faz um excelente trabalho como proxy reverso.
- No caso de mais LB ser necessário para lidar com o tráfego, basta adicionar mais máquinas ao cluster e os endereços IP serão reequilibrados entre todas as máquinas. Você pode até mesmo fazer isso automaticamente (adicionando e removendo balanceadores de carga). É por isso que uso 6 ips para 3 máquinas, para deixar algum espaço para crescimento.
No seu caso, ter VPSs fisicamente separados é uma boa ideia, mas torna o compartilhamento de ip mais difícil. O objetivo é ter um sistema redundante e resistente a falhas, e algumas configurações para balanceamento de carga / HA acabam adicionando um único ponto de falha (como um único balanceador de carga para receber todo o tráfego).
Eu também sei que você perguntou sobre o apache, mas atualmente temos ferramentas específicas mais adequadas ao trabalho (como nginx e verniz). Deixe o apache rodar os aplicativos no backend e sirva-o usando outras ferramentas (não que o apache não possa fazer bom balanceamento de carga ou proxy reverso, é apenas uma questão de transferir diferentes partes do trabalho para mais serviços, para que cada parte possa se sair bem é share).