Apache2 / fastcgi / php fastcgi / haproxy - problemas de reinicialização graciosa mudando as definições de configuração

1

Eu tenho um Apache2 com configuração fastcgi php; Eu quero fazer alterações de configuração sem que um cliente perceba (por isso, nenhum pedido caiu / falha), então eu coloquei o haproxy na frente dele; então eu tenho 2 servidores Apache2 rodando em diferentes IPs no mesmo servidor e o balanceamento de carga / failover Haproxy sendo executado na frente deles.

Tanto o Apache como o Haproxy têm o Keepalive desligado. Quando executo /etc/init.d/apache2_1 restart ou apache2ctl -k graceful -f /etc/apache2_1/apache2.conf durante a execução;

assista -n 1 lynx -dump -source http: // servidor /test.php (que tem eco rand (1.100000); nele)

ainda cai 1 pedido com um gateway inválido. Como posso evitar que isso aconteça?

Basicamente, se eu pudesse dizer ao Haproxy para terminar todas as conexões (terminar significa apenas deixá-las rodar) para o servidor1, mas enviar todas as novas para o servidor2 em um determinado ponto no tempo, isso funcionaria.

Observe também; Eu preciso de php-cgi; com mod_php as coisas são mais fáceis.

Editar; Eu tentei isso; link no entanto, as solicitações que estão acontecendo não são passadas para o backup, então alguns clientes ainda estão recebendo um Gateway Incorreto.

Para responder ao comentário de Ben;

Com cgi gracioso parece começar todas as conexões em curso; com mod_php gracioso funciona bem; sem tempo de inatividade. Haproxy vê quando o apache está diminuindo (fica amarelo na tela de estatísticas), mas o fastcgi simplesmente corta os scripts no ar;

Sáb 15 de agosto 19:00:55 2009] [notice] mod_fcgid: process /var/www/gui/wsapi.php(13987) exit (erro de comunicação), finalizado chamando exit (), código de retorno: 0

[Sáb 15 de agosto de 19:00:55 2009] [aviso] mod_fcgid: processo 14012 vai desligamento normal, enviando SIGTERM

[Sáb 15 de agosto de 19:00:56 2009] [aviso] mod_fcgid: process /var/www/gui/index.php(13999) exit (erro de comunicação), finalizado chamando exit (), código de retorno: 0

Muitos clientes também estão recebendo;

[Sáb 15 de agosto 19:05:42 2009] [erro] [cliente xxx.xxx.xxx.xxx] Final prematuro dos cabeçalhos de script: index.php

Outro sinal de que não há nada de gracioso no desligamento.

    
por CharlesS 15.08.2009 / 20:22

1 resposta

1

Você pode dizer ao haproxy para parar de enviar conexões para um servidor. Para isso, você precisa especificar "http-check disable-on-404" em sua configuração haproxy e fazer com que seu servidor web retorne 404 (e nada mais) para as verificações de integridade do haproxy. Se haproxy vir isso, ele marcará o servidor como "NOLB", o que significa que ele é excluído do balanceamento de carga, mas ainda conclui suas conexões e ainda aceita conexões persistentes que o solicitam. Dessa forma, todos os novos clientes vão para outros servidores.

A maneira mais simples de fazer isso é verificar um arquivo "vivo", que, uma vez removido, fará com que um 404 seja retornado (daí a escolha deste código de retorno). É claro que desenvolver uma aplicação do lado do servidor mais completa para responder às verificações de saúde é melhor!

    
por 15.08.2009 / 21:45