Os trabalhadores do httpd Apache tentam novamente

7

Eu tenho um servidor web Apache httpd executando mod_proxy e mod_proxy_balancer. O conjunto de / somedir é enviado para duas máquinas de trabalho que atendem as solicitações usando o escalonador de round robin. Cada máquina de trabalho está executando o IIS, mas não acho que isso seja importante.

Eu posso demonstrar o balanceador de carga funcionando solicitando repetidamente uma única página que contém o endereço IP da máquina e posso ver que ela alterna de um para o outro em uma forma previsível de round robin.

Se eu desligar um dos servidores IIS e começar a solicitar a mesma página, cada página conterá apenas o endereço IP da máquina que está ativa. No entanto, se eu iniciar o IIS e não executar meu aplicativo IIS, o / somedir retornará 500 (como deveria).

Eu adicionei 500 ao estado de falha (Apache 2.4), então quando ele atinge o erro, o Apache coloca a máquina do trabalhador em estado de erro. O Apache ainda retorna o erro de proxy para o cliente. Como posso fazer o Apache pegar a falha do proxy e tentar novamente usando um trabalhador diferente da mesma maneira que uma falha de conexão faz.

Atualizar

Há quase a mesma pergunta feita no StackOverflow, juntando-as a elas.

link

    
por David Newcomb 03.08.2012 / 16:41

2 respostas

4

Falei com uma lista de discussão do Dev on httpd e ele confirmou que esse recurso não foi implementado na base de código atual. Eu também revi o código eu mesmo. A máquina de estado dentro de mod_proxy_balancer não pode tentar novamente no erro HTTP, mas só pode fazê-lo em caso de erro de conexão. Eu tentei implementar isso sozinho, mas é muito complicado e eu posso facilmente tornar a base de código instável.

Portanto, este problema não tem solução conhecida hoje ...

    
por 06.08.2012 / 21:05
0

Apenas no caso de alguém responder a essa pergunta novamente: a diretiva failonstatus foi implementada desde o Apache 2.2.27.

<Proxy balancer://backends>
BalancerMember http://10.1.1.11
BalancerMember http://10.1.1.12
ProxySet failonstatus=500
</Proxy>

Log:

[Thu Apr 28 03:13:06.176916 2016] [proxy_balancer:error] [pid 3285:tid 140231873353472] [client 10.1.1.1:43608] AH01174: balancer://puppetmaster: Forcing worker (http://10.1.1.12) into error state due to status code 500 matching 'failonstatus' balancer parameter
    
por 28.04.2016 / 05:36