Recarregando processos mod_wsgi com segurança em produção

1

Existe uma maneira de reiniciar com segurança processos mod_wsgi sob demanda, possivelmente em execução em várias máquinas? Estou servindo um aplicativo do django com mod_wsgi no modo daemon com o apache:

WSGIDaemonProcess myapp user=user group=user processes=30 threads=1
WSGIProcessGroup myapp

Eu li as sugestões na % documentação demod_wsgi , mas nenhuma das soluções sugeridas funciona para mim :

  1. A execução de um script de monitoramento não é recomendada em um sistema de produção.
  2. Enviar sinais de kill não é seguro no meu caso. Eu quero evitar interromper os pedidos em execução. A recarga não deve desativar o serviço. Abrandar é bom.
  3. Tocar no arquivo de configuração mod_wsgi faz o truque com segurança, mas como fazê-lo em várias máquinas?

Idealmente, devemos poder reiniciar os processos com uma ação. Alguma sugestão?

Nota: Tenho que executar vários processos com um thread. Meu aplicativo não é thread-safe.

Editar, eu posso fazer isso do Puppet se essa é a única opção que eu tenho. mas eu prefiro se há uma maneira de fazê-lo a partir de uma visão especial protegida. Eu acho que isso é trivial para fazer em uma máquina, mas não várias

Muito obrigado

    
por Mark 11.11.2009 / 13:08

3 respostas

0

Touching the mod_wsgi configuration file does the trick safely, but how to do it on multiple machines?

Isso seria resolvido usando uma base de código compartilhada, como de uma montagem NFS.

Como alternativa, ele deve fazer parte do processo de controle / implantação da versão.

  • Você usa o controle de versão atualmente?

    Nesse caso, crie um processo que garanta a atualização do arquivo. Você poderia automatizá-lo com um gancho post-commit, por exemplo.

  • Como você implementa seu código?

    Considere usar algo como Capistrano ou fantoche e inclua uma ação na sua receita de implantação para atualizar esse arquivo.

por 11.11.2009 / 13:46
3

Não há diferença entre (2) e (3) em relação a como as solicitações existentes são efetuadas. Enviar um kill SIGINT não apenas sai do processo, mas dispara o mesmo tipo de desligamento ordenado que o (2) faz. De fato, (2) internamente apenas envia um SIGINT para si mesmo. O importante é identificar os processos que precisam ser enviados pelo SIGINT. Para isso, você deve usar a opção 'display-name' para WSGIDaemonProcess para que eles sejam nomeados na saída 'ps' e mais fáceis de identificar.

    
por 11.11.2009 / 20:53
0

Touching the mod_wsgi configuration file does the trick safely, but how to do it on multiple machines?

Eu acho que isso resolve o problema de como acionar mod_wsgi para recarregar os scripts de uma maneira muito elegante. Para a distribuição desta ação entre vários hosts ao mesmo tempo, recomendo usar um utilitário como pssh (ssh paralelo). Sua configuração não deve ser um problema.

    
por 11.11.2009 / 13:38