Balanceador de carga para lidar com erros do servidor silenciosamente

3

Estou procurando um balanceador de carga HTTP que manipule os erros do servidor silenciosamente. O que eu quero é balancear a carga de cada solicitação para que funcione, no pior dos casos com um pouco de tempo limite.

  • Se o nó da Web de trabalho retornar um erro do servidor HTTP 500, o balanceador de carga precisará repetir a solicitação com outro nó da web. Se o segundo nó retornar outro erro 500, fazendo o mesmo com o último nó (suponho que tenha 3 nós). Se o último nó retornar um erro 500, exiba-o ao usuário final.

  • Se um tempo limite do nó do servidor (levar mais de 1 ou 2 segundos para responder) a solicitação terá que ser roteada para outro servidor, o cliente deverá receber uma boa resposta em 2+ segundos.

por cedivad 22.02.2013 / 11:36

4 respostas

9

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
por 04.03.2013 / 08:46
1

Eu estou supondo que você quer servir HTTP?

O Nginx oferece muitas funcionalidades, incluindo todas as que você está procurando: link

verifique especialmente as configurações de upstream e proxy, lá você pode implementar todos os seus requisitos: link link

    
por 22.02.2013 / 14:08
1

Outra possível solução para implementar seus requisitos é LVS (Servidores Virtuais do Linux) que são implementados no próprio kernel do Linux. se você acabou de pesquisar no Google por LVS tutorial , você receberá muitos resultados.

    
por 22.02.2013 / 14:09
1

O que você está procurando aqui é um proxy ou um balanceador de carga razoavelmente caro.

No lado do proxy, o squid / nginx pode fazer o trabalho relativamente razoavelmente - o que você escolhe é uma questão de preferência, mas também é importante ter a cozinha à sua disposição (se não, o nginx é indiscutivelmente a melhor escolha)

No lado do hardware das coisas ... um balanceador de carga F5 pode fazer esse tipo de coisa, garantindo também alta escalabilidade.

    
por 03.03.2013 / 14:00