티스토리 뷰

server/tomcat

Tomcat Parallel deployment

nklee 2015.09.02 18:25

테스트가 진행중인 서버에 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을 여러 개 올릴 수 있게 됨으로써 테스트에 영향을 주지 않고, 최신 버전의 소스를 배포할 수 있었다.

댓글
댓글쓰기 폼
공지사항
Total
2,405,231
Today
544
Yesterday
1,380
링크
«   2018/11   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
글 보관함