2014년 3월 29일 토요일

[tomcat] multiple instance 설치


0. 환경

macbook-pro 13” 2012 mid / 10GB
parallels9 ubuntu 12.04 LTS


1. 필요성

배포 환경에 따라 서버환경도 달라짐

  • 실무 프로젝트의 배포 환경은 개발, 스테이징, 상용으로 구분
  • 개발단계
    - One Server, One Instance, Multiple Context의 환경을 주로 사용
  • 스테이징 단계
    - 기능 및 성능 테스트를 위한 환경, 상용단계와 거의 동일 환경
  • 상용 단계
    - 실제 서비스하여 고객이 접속하는 환경

스테이징 단계 이상부터 수용해야하는 상황

  • 한 서버에 2개 이상 WAS버전 구동 가능
  • 상위 버전 업그레이드 용이
  • 기존 서비스 변경 최소화
  • 서비스별 튜닝 설정 (WAS, JNDI, Http Connection)이 별도 구성
  • 하나의 Instance를 Shutdown해도 다른 서비스에 영향을 주지 않음
  • 운영 및 장애에 신속 대응

2. Tomcat의 구조

Directory 구조

directory 설명
lib Tomcat Engine이 사용하는 외부 라이브러리리(.jar) 공간
bin Tomcat이 실행하는 명령 스크립트 공간
conf Tomcat의 Web 서비스를 위한 설정 파일 공간
logs Log 파일 공간
temp Tomcat Engine에서 사용하는 임시 파일 공간
webapps Web application 배포 공간
work JSP 파일이 Servlet으로 Compile(.class)된 공간

구성방법

구분 특징
Tomcat Engine /lib, /bin directory만 사용
Tomcat Instacne /conf, /logs, /temp, /webapps, /work 사용
  • 하나의 Instacne는 하나의 JVM
  • directory를 물리적으로 구분함으로써 Multi Instance 환경 구성

4. 실행흐름

설정된 환경변수

CATALINA_HOME="Tomcat Engine 디렉토리"
CATALINA_BASE="Tomcat Instance 홈 디렉토리"
CATALINA_TMPDIR="Tomcat Instance가 사용하는 임시 디렉토리"
JAVA_HOME="Java 홈 디렉토리"
CLASSPATH="클래스 패스 설정 정보"

$CATALINA_HOME/bin/startup.sh 실행

실제로 catalina.sh를 실행

catalina.sh는 Tomcat 기동 준비

  1. CATALINA_HOME 환경변수를 통해 Tomcat Engine Directory 찾음
  2. CATALINA_BASE 환경변수에 있는 Directory를 찾아 Instance 기동

5. 설치방법

환경변수 설정

# OS 홈 디렉토리에 있는 .bash_profile
# vi ~/.bash_profile

JAVA_HOME="설치된 JDK directory 위치"
CATALINA_HOME="설치된 Tomcat Engine directory 위치"

각 Instance별 Directory 생성

mkdir [경로/instance_name1]
mkdir [경로/instance_name2]

필수 directory 복사

# Tomcat Engine directory로 이동
cd $CATALINA_HOME

# 각 필수 directory 복사
# cp의 -r 옵션은 그 하위폴더까지 복사한다는 의미를 가짐
cp -r * [경로/instance_name1]
cp -r * [경로/instance_name2]

필요없는 file/directory 제거

#instance_name1로 이동
cd [경로/instance_name1]

# 필요없는 file/directory 제거
rm -rf LICENSE NOTICE RELEASE-NOTES RUNNING.txt
rm -rf ./bin ./lib

# instance_name2도 동일하게 진행

[경로/instance_name]/conf/server.xml 수정

  • 하나의 머신을 Multi Instance로 가동하므로 Port관리가 중요
  • 실무에서는 각 Port번호를 정책적 관리가 필요
  • server port, http port, redirect port, ajp port를 다르게 설정

Port별 특징

Port Name 특징
server port server의 shutdown을 받는 port
http port http 서비스를 위한 port
redirect port https로 요청이 들어온 경우 설정된 port로 redirect
AJP port (Apache Jserv Protocol) web server의 요청을 처리하는 port

참고: websphere


6. 실행방법

각 instance의 경로를 재지정 (instance_name1 기준)

export CATALINA_BASE="[instance_name1의 경로]"

JAVA_OPTS, CATALINA_OPTS 환경변수를 상황에 맞게 설정

export JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

export CATALINA_OPTS="-Denv=product -Denv.servername=[instance_name1]"

Tomcat Engine에서 시작 및 종료 스크립트를 실행

# 시작
$CATALINA_HOME/bin/startup.sh

# 종료
$CATALINA_HOME/bin/shutdown.sh

7. 기타 Tips

실행 Script 작성방법 [작성중]


8. 참고자료


Written with Dec7.

댓글 없음:

댓글 쓰기