como evitar tempos limite durante a reinicialização do servidor

4

Estou com problemas em um site que usa o round robin de DNS para failover.

Existem dois servidores web. Quando eu desligar o apache em uma caixa, está tudo bem. Quando os navegadores tentam ir para o servidor da Web com o apache desativado, ele recebe uma conexão recusada e ele tenta automaticamente a outra.

No entanto, ao reinicializar, me deparo com problemas. Quando eu reiniciar o servidor, em vez de conexão recusada, os navegadores agora aguardam um tempo limite que leva a um site muito lento até que o servidor volte a funcionar.

Existe uma maneira de configurar a rede (ou o CentOS) de tal forma que, durante as reinicializações, o IP continue a rejeitar, em vez de demorar muito tempo para o tempo limite?

    
por user788171 17.01.2015 / 16:02

3 respostas

1

Como solução alternativa ad hoc (apenas na ausência lamentável de um balanceador de carga), você pode acompanhar a reinicialização do servidor com configurações adequadas em um de seus próximos saltos (um comutador, um roteador, um firewall ), por exemplo,

  1. pare o apache
  2. Fazer o próximo salto responder com mensagens explícitas "não alcançáveis"
  3. reinicialize o servidor
  4. Desfazer alterações feitas na etapa 2

Especificamente, a etapa 2 pode consistir em uma das seguintes

  • adicionando o ip do servidor da web como endereço ip secundário a uma de suas interfaces (desde que não exista nenhum servidor da web executando nele)
  • ou crie uma entrada de arp estática (ou seja, tradução ip para mac) que se refere a um host runnnng que não executa um servidor da Web
  • ou tornar esse único ip não-roteável
  • ou adicione uma regra de firewall para rejeitar (não soltar!) o tráfego da porta 80 para o ip em questão
  • ou modificar uma entrada SNAT existente para seu servidor da Web para se referir a um host que está em execução, mas não a um servidor da Web
  • ou anexar um host simulado com o mesmo endereço MAC na mesma lan

Possivelmente outras variantes existem também. Há, claro, um ponto importante: Não se atire no pé! Por exemplo,

  • Você pode acidentalmente quebrar outras coisas ao introduzir tais configurações incorretas
  • Você pode esquecer de desfazer as alterações
  • seu servidor pode não conseguir fechar adequadamente as conexões existentes
  • Seu servidor reinicializado pode ficar insatisfeito se não conseguir ver a Internet imediatamente devido a esse método (pode querer desesperadamente verificar se há atualizações, licenças, tempo ou ...)

Além disso, eu mesmo não testei nenhum desses métodos, acabei de pensar neles e acho que eles devem funcionar.

    
por 17.01.2015 / 18:08
9

Use um software Loadbalancer com verificação de integridade como Zen-Loadbalancer ou HA-Proxy .

Lá você pode configurar um healthcheck que pinga ou abre um arquivo no seu servidor Web e os remove do Balanceamento de carga se o arquivo não estiver disponível por exemplo.

O round-robin de DNS não é feito para essas coisas porque o seu DNS não sabe se um servidor não está disponível. O DNS dá os pedidos alternadamente para cada ip.

    
por 17.01.2015 / 16:05
5

Apenas para explicar: O DNS Round Robin não foi projetado para o propósito para o qual você está usando. Simplesmente diz ao DNS para distribuir os endereços IP disponíveis de maneira alternada; não há feedback entre o servidor com falha e o DNS (e, se houvesse, os problemas de temporização impediriam que isso fosse de muita ajuda, devido à maneira como o DNS é projetado). Assim, você pode usar o DNS-Round-Robin para o balanceamento de carga (de forma limitada), mas não para failover.

Veja esta citação: "Se um serviço em um dos endereços na lista falhar, o DNS continuará a distribuir esse endereço e os clientes ainda tentarão alcançar o serviço inoperante." de link

O motivo pelo qual você não teve nenhum problema com o servidor da Web foi desligado, é provável que o navegador fique no servidor da Web que funciona, talvez por causa de algum cookie de sessão ou algo semelhante. Você deve tentar sua experiência com o servidor da web desligar várias vezes, usando sessões completamente novas - você deve ter os mesmos problemas que com as reinicializações.

Além disso, eu daria uma segunda resposta já dada: uma solução loadbalancer faria o que você quer.

    
por 17.01.2015 / 17:10