Varnish falhando intermitentemente por nenhuma razão óbvia

2

Nos últimos anos, temos executado o Varnish como um cache e balanceador de carga na frente de vários servidores apache servindo vários milhares de sites.

Também usamos monit para garantir que, se o verniz morrer, ele seja reiniciado. A seção de verniz no monitrc é assim:

  # Check varnish on port 80
  check process varnish with pidfile /var/run/varnishd.pid
  start program = "/etc/init.d/varnish start"
  stop program = "/etc/init.d/varnish stop"
  if failed host 127.0.0.1 port 80 protocol http
    and request "/monit-check-url"
    then restart

Isso funcionou bem por pelo menos 3 anos. Recebemos falhas ocasionais na verificação da porta 80, mas a monit reinicia o verniz de acordo e geralmente não é percebido pelos usuários.

No entanto, ao longo das últimas semanas, estamos vendo rajadas dessas falhas, geralmente ao longo de um par de horas, e os usuários estão percebendo falhas de conexão. Hoje tem sido particularmente ruim.

Não há pistas no syslog (é uma caixa debian btw) como sugerido pela seção "Varnish crashing" em: link e tudo que vemos lá é monit falhando é checar na porta 80 e depois parar e iniciar o verniz.

Além disso, não estamos vendo nenhum aumento na largura de banda ou no número de acessos aos servidores da Web de backend que sugiram que ele está falhando sob uma carga maior que o normal.

Estávamos executando o Varnish 3.0.3, que atualizei para a versão 3.0.7, mas o problema continua. Nenhuma outra alteração foi feita nesta caixa que coincida com os problemas iniciados, e a configuração do verniz não foi alterada em um longo tempo.

Alguém teve alguma experiência semelhante com verniz ou tem alguma sugestão para solucionar esse problema? Poderia ser algum tipo de ataque?

Qualquer ajuda ou conselho muito apreciado!

    
por SimonK 23.08.2015 / 18:11

1 resposta

0

Sua abordagem aqui parece um pouco pesada, pois há muitos motivos pelos quais uma solicitação pode falhar, e nem todos são problemas de verniz (por exemplo, problemas de conectividade, falhas nos backends etc.). O verniz de reinicialização causará uma interrupção durante a inicialização. novamente, então só deve ser usado como último recurso.

Antes de reiniciar qualquer coisa, recomendo executar varnishadm debug.health na caixa de verniz para ver em que estado o verniz considera o back-end. Dependendo do resultado, você pode decidir onde procurar mais:

  1. Se o backend for considerado não-íntegro, o problema estará entre o verniz e o back-end (ou no próprio back-end). Verifique a rede para o backend, além de qualquer monitoramento no backend.
  2. Se o backend for considerado saudável, o problema está entre monit e verniz. Verifique a rede para o servidor de verniz, além de depurar o monitoramento em si.
  3. Se o processo do varnishadm não puder estabelecer uma conexão, o problema é com o próprio verniz. Verifique quais processos de verniz estão em execução e procure por mensagens de erro de verniz nos seus registros.
por 16.03.2017 / 01:22