본문 바로가기
서버

Tomcat Parallel deployment

by 탁구치는 개발자 2015. 9. 2.

테스트가 진행중인 서버에 hot deploy 할 수 있는 방법에 대해서 고민을 해오다가 알게된 tomcat parallel deployment에 대해서 정리한다.


병렬 배포를 알기 전까지는 apache를 이용해 로드밸런싱을 해볼까라는 생각을 가졌다. 문제는 한정된 자원에 각 서비스별 톰켓을 두 대씩 기동해야 한다는 것이고, 결정적으로 테스트 장비의 메모리가 충분치 않았다.

고민을 해오다가 tomcat parallel deployment 기능에 대해서 알게 되었고, Tomcat7 부터 해당 기능을 이용할 수 있다고 하여 바로 적용하게 되었다.


자세한 설명은 https://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment 페이지에서 확인할 수 있고, 동작 방법은 다음과 같다.

tomcat parallel deployment 기능을 사용하기 위해서는 unpackWARs="true" autoDeploy="true" 로 설정되어 있어야 함 (server.xml)


1. ROOT context가 현재 서비스 중인 상태

2. webapps 디렉토리에 ROOT##2.war 파일 배포

3. ROOT##2.war 파일의 압축이 풀리며 ROOT##2 디렉토리가 생성

4. ROOT##2 context application이 구동

5. ROOT, ROOT##2 두 개의 context가 운용이 되는 상태에서 브라우저를 띄운 후 해당 서비스에 접속하게 되면(localhost:8080) ROOT##2 context로 연결이 된다. 참고로 기존 ROOT에 접속했던 session은 변경 없이 ROOT context에 연결

6. ROOT##2 버전의 소스가 최신이기 때문에 기존 ROOT에 연결되어 있는 세션들도 ROOT##2를 바라보게 할 필요성이 있으므로 ROOT 디렉토리를 삭제한다.

7. ROOT 디렉토리가 삭제되면 ROOT context application이 shutdown된다.

8. ROOT context에 연결되던 session들이 ROOT##2 context application에 접속되는 것을 확인할 수 있다.


위와 같이 동작이 가능한 이유는 ## 에 비밀이 있다.

ROOT

ROOT##1

ROOT##2

ROOT##3

## 뒤에 붙는 숫자가 context version을 의미하는데 위의 application 모두 context path는 ROOT이다.

설정으로 표현하면 다음과 같다.

<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT" />

<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##1" />

<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##2" />

<Context path="" docBase="{TOMCAT_HOME}/wepapps/ROOT##3" />


결국 하나의 tomcat instance에 동일한 context path를 가진 application을 여러 개 올릴 수 있게 됨으로써 테스트에 영향을 주지 않고, 최신 버전의 소스를 배포할 수 있었다.

'서버' 카테고리의 다른 글

tomcat 구동 시 /dev/random 블로킹 이슈  (6) 2016.08.25
Nginx  (0) 2016.07.15
Apache worker 파일에 template 적용하기  (0) 2016.01.22
tomcat7 소스 빌드  (0) 2015.09.07
CentOS 5 버전에 Redis 설치  (0) 2014.10.10
tomcat 기동 후 URI(/)로 자동 호출  (0) 2014.06.16
리눅스 PATH또는 export 설정  (0) 2014.06.13
centOS에 Git 설치  (0) 2014.01.13