Você pode fazer o nginx com o HttpProxyModule (é um módulo padrão e geralmente está dentro do nginx) para implementar esse balanceador de carga.
O Nginx é leve, rápido e tem muita funcionalidade (você pode até inserir código lua nele).
Exemplo de configuração para seu caso de uso seria
upstream backend {
server 10.0.0.1;
server 10.0.0.2;
server 10.0.0.3;
}
server {
listen 80;
server_name _;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
O molho secreto é a diretiva proxy_next_upstream , que determina em quais casos a solicitação será transmitida para o próximo servidor. Os valores possíveis são:
-
Erro
- - ocorreu um erro ao conectar-se ao servidor, enviando um pedido, ou lendo sua resposta;
- tempo limite - tempo decorrido durante a conexão com o servidor, transferir a solicitação ou durante a leitura da resposta do servidor;
- invalid_header - o servidor retornou uma resposta vazia ou incorreta;
- link
- link
- link
- link
- link
- off - proíbe a transferência da solicitação para o próximo servidor