Boa noite a todos!
Na empresa q eu trabalho a equipe de desenvolvimento criou um sistema que funciona com a seguinte arquitetura: basicamente é um servidor Linux (Red Hat 9 nas versões anteriores e Fedora Core 4 nas atuais) que roda um servidor HTTP (Apache), com uma aplicação PHP, que acessa um banco de dados local MySQL.
Como redundância, uma outra máquina idêntica é instalada e disponibilizada como backup, com IP e hostname diferentes da principal. Este servidor backup fica parado. Quando a principal morre, é preciso que alguém mude manualmente todos os clientes, fazendo-os apontar para o endereço do servidor backup.
Nem preciso dizer q não rola de manter uma parada assim em produção. Ainda mais em redes q a gente aqui não tem acesso remoto e nem sempre tem alguém de prontidão no local pra fazer a mudança, gerando muitas vezes indisponibilidade elevada.
Pensei em criar uma solução de alta disponibilidade pra essa solução, impactando o mínimo possível. Não tem como implementar cluster, pq acho q precisaria mexer muito na estrutura do MySQL. Mas dá pra resolver o problema do banco configurando uma replicação transacional nos 2 servidores. Assim, toda transação que ocorra em um servidor automaticamente é replicada para o outro, através de uma conexão ponto-a-ponto dedicada.
Meu problema está em balancear o Apache. Alguém conhece alguma solução simples e boa pra fazer isso? De preferência via software, não vai rolar de comprar um balanceador tipo LocalDirector ou Alteon. Assim eu
ficaria com apenas um IP/hostname virtual e configuraria os clientes para fazer acesso a este VIP.
Este balanceador poderia trabalhar fazendo round-robin ou até mesmo mandando todas as requisições para um servidor e quando este cair, passaria a mandar pro outro, como se fosse um cluster ativo-passivo. Tanto faz, desde que se possa fazer o failover automaticamente e de modo transparente pros clientes.
Um abração!
Alexandre