Subir aplicação no tomcat sem ter que dar stop na que está rodando

Posted . Visible to the public.

Configuração

Algumas aplicações de produção não podem ser paradas, pois o sistema precisa estar disponível 100% do tempo, ou pode ser necessário atualizar a versão de um cliente, mas o cliente nunca fica satisfeito de ter sua aplicação interrompida.

O tomcat7 tem uma funcionalidade (Parallel Deployment) que nos permite realizar a atualização sem que seja necessário parar a aplicação que já está rodando.

Para que funcione perfeitamente seu Host no server.xml do tomcat deve ter as configurações autoDeploy e undeployOldVersions ativadas.

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" undeployOldVersions="true">
  • autoDeploy: O tomcat verificará seu diretório appBase periodicamente, verificando se houve alguma alteração, se houver, ele faz o deploy da aplicação que foi atualizada.

  • undeployOldVersions: Utilizando o versionamento das suas aplicações, ele faz o undeploy automático das aplicações de versões antigas que não são mais utilizadas, para isso ele verifica se não há mais nenhuma sessão ativa na aplicação.

Dessa forma, você pode fazer a atualização e deixar as duas aplicações rodando. O tomcat direcionará as novas conexões para a nova versão e manterá a antiga até que não exista mais nenhuma sessão ativa nela. Assim que todas as sessões forem encerradas, ele faz o undeploy.

Para versionar as aplicações no tomcat, utilize os wars da seguinte maneira:

${NOME_APLICACAO}##${VERSAO}.war

Exemplo:

jobs##4.0.18.war

Dessa forma, a coluna version no manager do tomcat ficará com o nome da versão que você especificar (veja a aplicação de nome "jobs"):

Captura_de_tela_de_2015-12-18_11_00_49.png

Deploy Terminal

Ex.: Para subir um jobs utilize o war com a versão da aplicação, como na imagem abaixo:

Captura_de_tela_de_2015-12-18_11_14_08.png

Daí, ao atualizar o jobs coloque no webapps um novo war como na imagem abaixo:

Captura_de_tela_de_2015-12-18_11_14_35.png

Desta forma, o tomcat fará o deploy da versão 3.1.22 e, assim que não houverem mais sessões abertas na versão 3.1.21, ele fará o undeploy dela, sendo assim, sua aplicação não fica off em nenhum momento.

Deploy HTTP

Para subir uma aplicação utilize o parâmetro version ao enviar o war para o tomcat. Ele é obrigatorio, mesmo que o arquivo do war tenha o numero de versão no nome do arquivo

curl -T ${ARQUIVO_WAR}.war "http://${USUARIO}:${SENHA}@${IP}:${PORTA}/manager/text/deploy?path=/${NOME_APLICACAO}&update=true&version=${VERSAO}"

Exemplo

curl -T jobs-3.1.22.war "http://${USUARIO}:${SENHA}@${IP}:${PORTA}/manager/text/deploy?path=/jobs&update=true&version=3.1.22"

Fim

Posted by João Paulo to ZeroGlosa (2015-12-18 12:40)