HAProxy - Detecção de erro do servidor HTTP

2

Eu quero usar o HAProxy para balanceamento de carga e failover de um aplicativo Apache-PHP hospedado em muitos servidores de back-end idênticos. Existe alguma maneira de detectar um nó com falha no HAproxy e removê-lo do grupo ativo de nós no contexto de uma única solicitação HTTP sem retornar um erro 5xx.

Idealmente, o servidor pode retornar um cabeçalho de resposta - "Status: Error" e o HAProxy deve detectar esse cabeçalho e remover esse nó específico do conjunto ativo.

Não consigo devolver o erro 5xx da minha aplicação.

Essa configuração é possível para o HAProxy?

    
por Praveen 23.08.2012 / 14:52

3 respostas

2

Uma resposta 5xx ainda é uma resposta, portanto, por padrão, ela seria passada para o cliente.

Eu não vi nenhum produto que alcance o nível que você mencionou. Se não existir, você precisa de um balanceador de carga que permita gravar uma regra de resposta pós-personalizada e que a regra tenha acesso para modificar o estado do nó incorreto no pool e alimentar a solicitação de volta ao seu pool. F5 BigIP's , Riverbed StingRay (Zues) certamente oferecem o elemento de script e gerenciamento de nós ( f5 p. Ex. Abaixo na parte inferior ). Verniz e Lula embora balanceadores de carga não puros oferecem a capacidade de modificar respostas pós-resposta de back-end também. Não tenho certeza sobre o acesso deles ao gerenciamento de nó / pool. Observe que você também precisaria lidar com os tempos limite de solicitação da mesma maneira que as respostas 5xx.

A página que você usa para monitorar um status de nós também precisaria ser algo que testasse completamente o status dos aplicativos e pudesse ser atingido com bastante frequência

O HAProxy mais próximo parece chegar a este observe <mode> que lhe permite reagir aos erros que ocorrem no tráfego regular.

I cannot return 5xx error from my app.

Em algum momento vai acontecer, atender a isso.

    
por 23.08.2012 / 16:17
2

Concordo com a maioria dos comentários do mindthemonkey. Observe que você também pode bloquear a resposta e substituí-la por um conteúdo personalizado (usando o erro 502), mas isso é um pouco limitado (por exemplo: pode ser usado para enviar um redirecionamento para que o navegador publique a solicitação novamente) e muito sujo.

Por que você quer fazer isso em primeiro lugar? Dizer que você "não pode retornar 5xx" está errado desde que você vai de qualquer maneira e os clientes têm que lidar com isso também por definição e pela especificação. É porque você está atrás de um CDN que se comporta mal ao retornar 5xx? Se assim for, talvez você queira apenas reescrever os códigos de erro de saída (mas tenha muito cuidado com os códigos que você usa, todos eles têm uma semântica muito específica).

    
por 25.08.2012 / 09:38
1

Praveen, se você estiver usando pelo menos o PHP 5.4, isso deve ajudar seu aplicativo PHP:

Se você estiver usando o PGP 4.3 para 5.3, você pode usar header () (verifique as man pages para uso).

Tecnicamente você pode configurar o HAProxy para fazer o que você pede, mas provavelmente é mais apropriado simplesmente modificar seu aplicativo para se comportar corretamente. Nesse ponto, o HA Proxy deve lidar com isso mais ou menos automaticamente.

    
por 03.07.2014 / 18:04

Tags