haproxy httpchk verificação múltipla no backend

5

é possível verificar duas condições em um backend? exemplo

backend web-static
        option httpchk GET /path/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        option httpchk GET /path2/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        server appsrv1 192.168.1.10:80 check inter 3000 weight 1
    
por Elgreco08 31.03.2011 / 13:30

2 respostas

2

Provavelmente, seria mais fácil fazer um "wrapper" PHP: ele verifica os outros arquivos, e se tudo estiver ok, ele retorna com o código HTTP 200, se não, 404.

Se bem me lembro, isso também funcionou para nós quando queríamos verificar a funcionalidade também.

    
por 31.03.2011 / 14:03
3

Ah, eu fiz a mesma pergunta! Nossos desenvolvedores produziram um serviço da Web multifuncional fora de um nome de URL, porque precisamos oferecer suporte a navegadores não compatíveis com CORS (IE 8 e 9). Um nome DNS que leva a um endereço VIP possui vários subdiretórios, cada um com um aplicativo diferente. Portanto, nosso balanceador de carga precisa verificar a integridade de cada um dos serviços e, em seguida, tratá-lo como um grande "E" teste, ou seja, se até mesmo um dos serviços não passar no cheque, devemos tirar esse servidor do farm até que todos passem.

Estamos fazendo a transição dos balanceadores de carga Cisco ACE e, nessa plataforma, você simplesmente define várias configurações de "sonda" e, em seguida, solicita vários probes em um único farm de servidores, uma linha após a outra, e executa todas as probes . Como você provavelmente descobriu, o HAProxy não permite que você defina mais do que uma "opção httpchk" ... ou pelo menos ignora todos menos um deles, para que você não consiga o teste. Mas eu descobri no manual que eu poderia fazer isso não usando httpchk, substituindo uma série de linhas "connect, send, check" em "option tcp-check". Isso funciona perfeitamente.

option tcp-check
tcp-check connect
tcp-check send GET\ /FirstApplication/check.aspx?healthcheck\ HTTP/1.0\r\n\r\n
tcp-check expect string Healthy
tcp-check connect
tcp-check send GET\ /SecondApplication/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesThisIsGood
tcp-check connect
tcp-check send GET\ /ThirdApp/Check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string ExpectedCheckResult
tcp-check connect
tcp-check send GET\ /NumberFourApp/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesItIsWorking

Note que você precisa fazer um escape de barra invertida em cada espaço da string que está enviando. Eu estou usando HTTP / 1.0 na solicitação, que por padrão não faz keepalive, então estou reconectando em cada série de linhas. Eu suponho que eu também poderia usar HTTP / 1.1, mas eu também teria que transmitir um cabeçalho Host, então acho que é mais fácil assim. Executando essas quatro verificações seguidas, ainda leva apenas 60ms, então estou satisfeito. Observe também que estou usando apenas "esperar string", mas há também uma "espera rstring" para a expressão regular pesquisando o conteúdo resultante que retorna do servidor.

    
por 18.09.2014 / 05:20