Existe um equivalente em Apache ou Nginx ao IIS “dreno stop”?

3

Eu venho de um background em .NET e há muitas coisas que eu amei ao lado de muitas coisas que eu odiava. O IIS era, em geral, uma daquelas coisas que eu odiava.

No entanto, um recurso muito interessante do IIS é que você pode colocar uma "parada de drenagem" no nó do servidor. Isso redirecionaria todo o novo tráfego para outros nós, mas permitiria que os usuários atualmente online concluíssem suas sessões antes de encerrar o IIS completamente.

Isso foi extremamente útil para realizar implantações sem interromper as sessões do usuário.

Na minha nova empresa, não somos .NET e estamos adorando. Estamos trabalhando no JRuby e Java no EC2 usando o Apache como front-end e o Tomcat como nosso back-end.

Alguém já se deparou com qualquer solução que fornecesse funcionalidade semelhante com o Tomcat, Nginx ou Apache?

Eu fiz algumas pesquisas, mas não consegui encontrar nada de útil. Como sobre o Axis2? Alguém tem alguma experiência com isso?

    
por Brandon Black 09.03.2011 / 21:09

2 respostas

5

Se você quiser desligar o site apache local, permitindo que os usuários atuais concluam sua tarefa atual, pare de usar o Apache. Presumo que você tenha alguma outra arquitetura que redirecione os usuários para outro site operacional para permitir que eles continuem (ou seja, balanceador de carga, etc.).

Do site do Apache:

Sinal: GUINCHO     apachectl -k graceful-stop

" O sinal WINCH ou stop gracioso faz com que o processo pai avise os filhos para sair após a sua solicitação atual (ou para sair imediatamente se eles não estiverem servindo nada). O pai removerá seu PidFile e deixará de ouvir em todas as portas. O pai continuará a ser executado e monitorará as crianças que estão manipulando solicitações. Depois que todos os filhos tiverem finalizado e saído ou o tempo limite especificado pelo GracefulShutdownTimeout tiver sido atingido, o pai também sairá. Se o tempo limite for atingido, os filhos restantes receberão o sinal TERM para forçá-los a sair.

Um sinal TERM terminará imediatamente o processo pai e todos os filhos quando estiverem no estado "normal". No entanto, como o PidFile terá sido removido, você não poderá usar o apachectl ou o httpd para enviar este sinal. "

    
por 09.03.2011 / 22:15
3

Na prática, simplesmente

apache2ctl graceful

irá reiniciar o processo apache permitindo-lhe carregar uma nova configuração

Aqui, por exemplo, digamos que você tenha em produção www.v1 e dev em www.v2

<VirtualHost *:80>
    ServerName www.example.com

    DocumentRoot /var/www/vhosts/example.com/www.v1
    [...]
</VirtualHost>

<VirtualHost *:80>
    ServerName dev.exemple.com

    DocumentRoot /var/www/vhosts/example.com/www.v2
    [...]
</VirtualHost>

Agora pronto para colocar o dev em produção? Editar configuração (nada vai mudar on-line até que você faça um apache restart / gracioso melhor assistir quando o seu logrotate ocorrer, ele irá lançar um "apache2ctl gracioso")

<VirtualHost *:80>
    ServerName old.example.com

    DocumentRoot /var/www/vhosts/example.com/www.v1
    [...]
</VirtualHost>

<VirtualHost *:80>
    ServerName www.exemple.com

    DocumentRoot /var/www/vhosts/example.com/www.v2
    [...]
</VirtualHost>

Quando você sente que tudo está pronto ... cruze os dedos para que sua nova versão funcione no novo nome de domínio;)

apache2ctl graceful

E os magos devem acontecer:)

observe que "apache2ctl graceful" automaticamente faz um "apache2ctl configtest" e não falhará se você cometer um erro óbvio na configuração do seu apache

    
por 15.04.2014 / 14:43