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?
Respostas:
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:
/check.txt
./check.txt
para um aplicativo Ruby que contenha lógica suficiente para escolher entre uma resposta de 200 e 500 quando apropriado.inter
valor 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.inter
valor para algo menor como 60, mas definarise
para 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.)fonte
/check.txt
e apontar o httpchk para um aplicativo. Ocheck.txt
arquivo 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 quedisable server
não persiste entre recarregar.