테스트가 진행중인 서버에 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 |