Verificações de saúde HAProxy: usando httpchk e observe?


10

Estou usando o HAProxy 1.4.18 com a seguinte configuração de back-end

backend staging
  option httpchk HEAD /check.txt HTTP/1.0
  http-check disable-on-404
  default-server error-limit 1 on-error mark-down
  server staging01 x.x.x.x:80 check observe layer7
  server staging02 x.x.x.x:80 check observe layer7

Os servidores estão executando vários aplicativos no apache / passenger.

A combinação de httpchk e disable-on-404 permite o desligamento normal e a remoção de um servidor do lb com bastante facilidade, enquanto ainda é possível acessar diretamente (ou seja, para testes).

Estou tentando configurar o observe para desativar um servidor quando um aplicativo não está funcionando. Eu quebrei a configuração do aplicativo em staging02, para que ele sempre retorne 500. Ele está corretamente marcado como BAIXO após os primeiros 500, mas depois marcado com UP no próximo httpchk.

Aqui está o arquivo de log:

Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.

Existe uma maneira de combinar esses dois cheques?


Apenas para ter certeza de que o HAProxy é definitivamente o problema, você pode encontrar as três linhas de log correspondentes do servidor Apache de back-end e adicioná-las à sua pergunta?
Ladadadada

Um dos servidores apache foi propositadamente mal configurado para que todos os aplicativos nele retornem um código de erro 500. No entanto, o /check.txt sempre funciona, a menos que eu remova o arquivo. Quero que o servidor apache seja desativado se ele retornar um erro 500, mesmo que o arquivo check.txt ainda esteja lá.
Ouranos

Respostas:


4

A distinção que eu entendo agora é que /check.txt se realmente retornar uma resposta 200, mas todas as solicitações para o aplicativo retornar um 500. HAProxy vê os 500s voltando dos pedidos proxy e leva o servidor fora da piscina, mas, em seguida, inicia a sua própria verifique, recebe 200 e coloca o servidor novamente no pool.

A solução seria fazer um dos seguintes:

  1. Configure o Apache, em vez do aplicativo, para que cada solicitação retorne uma resposta de 500, até o arquivo estático /check.txt.
  2. Mude /check.txtpara um aplicativo Ruby que contenha lógica suficiente para escolher entre uma resposta de 200 e 500 quando apropriado.
  3. Defina o intervalor como algo ridículo como 3600. Isso deve lhe dar uma hora para fazer seus testes ou (se o servidor cair sozinho) descobrir o problema e trazê-lo de volta.
  4. Defina o intervalor para algo menor como 60, mas defina risepara algo maior como 60. Isso também lhe daria uma hora antes do servidor ser adicionado novamente ao pool. (Observe que esses dois estão listados por último, porque provavelmente são idéias muito ruins.)

Sim, é isso que está acontecendo. Acho que vou ter que me livrar do /check.txte apontar o httpchk para um aplicativo. O check.txtarquivo foi útil para remover rápida e graciosamente um servidor de todo o HAProxy (três deles na configuração de alta disponibilidade, apenas um ativo). Parece também que disable servernão persiste entre recarregar.
Ouranos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.