Ligações Graciosas do Apache e Keep-Alive

1

Estou tentando encontrar uma maneira de reiniciar rapidamente o Apache para aplicar alterações de configuração. O objetivo é:

  1. Reinicie sem distribuir solicitações atualmente processadas
  2. Faça isso da forma mais atomizada possível, ou seja, a nova configuração deve ser aplicada em todas as novas solicitações recebidas do tempo de reinicialização, sem que novas solicitações sejam manipuladas pela versão antiga.

O Apache possui um comando de reinicialização simples que satisfaz o primeiro objetivo, o comando de reinicialização é imediato e as solicitações existentes não são afetadas. No entanto, a reinicialização não é atômica. Se houver conexões existentes com o servidor no estado Keep-Alive, todas as solicitações a seguir enviadas por eles serão tratadas por processos antigos com a configuração antiga.

No meu caso, o servidor Apache está sentado atrás de um balanceador de carga, que pode enviar centenas de solicitações através de uma única conexão. Então, após a reinicialização, são necessários muitos minutos até que a nova configuração seja aplicada a todas as novas solicitações.

Existe alguma maneira de corrigir isso? fazer com que o Apache feche qualquer conexão Keep-Alive existente com um processo antigo após terminar de atender à solicitação atual?

    
por sagi 30.07.2009 / 20:18

2 respostas

2

Transforme KeepAlive Off , faça uma reinicialização elegante e mantenha desligue-o por algum tempo, faça a alteração na configuração e faça outra reinicialização normal. Isso é semelhante à prática de reduzir o TTL para uma entrada de DNS antes de uma alteração.

    
por 30.07.2009 / 20:59
0

Que tal configurar os seus MaxKeepAliveReqests e o seu KeepAliveTimeout baixos o suficiente para que os clientes ainda possam usar keepalive, mas não manter essas conexões por tanto tempo?

    
por 30.07.2009 / 23:53