Multi Tomcat Instance 실행하는 방법? 

Red Hat Linux 9 + Apache 2.0.55 + Tomcat 5.0.30 + jdk 1.5.0_06 + connector jk2.0.4
한 머신에 Apache(/usr/locat/apache) 하나에 Tomcat 3개(/usr/local/tomcat, 
/usr/local/tomcat2, /usr/local/tomcat3) 를 설치 했습니다.
Apache는 /usr/local/apache/bin/apachectl start로 실행을 시켰습니다.
그리고 Tomcat은 /usr/local/tomcat/bin/catalina.sh를 복사해서, 첫번째 Tomcat의 bin밑에
/usr/local/tomcat/bin/catalina2.sh, /usr/local/tomcat/bin/catalina3.sh를 만들었습니다.
catalina2.sh 와 catalina3.sh는 각각 윗부분에 CATALINA_BASE="/usr/local/tomcat2", 
CATALINA_BASE="/usr/local/tomcat3"를 삽입했습니다.
그래서 각 Tomcat instance를 실행(정지) 시키려면, 
첫번째 Tomcat /usr/local/tomcat/bin/catalina.sh start(stop)

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JAVA_HOME:       /usr/java/j2sdk
, 
두번째 Tomcat /usr/local/tomcat/bin/catalina2.sh start(stop)

Using CATALINA_BASE:   /usr/local/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JAVA_HOME:       /usr/java/j2sdk
, 
세번째 Tomcat /usr/local/tomcat/bin/catalina3.sh start(stop)

Using CATALINA_BASE:   /usr/local/tomcat3
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat3/temp
Using JAVA_HOME:       /usr/java/j2sdk
이런식으로 화면에 log를 보여 주면서 실행이 잘 됩니다.

그런데, /usr/local/tomcat/RUNNING.txt 문서를 보면
/usr/local/tomcat/bin/catalina.sh start -Dcatalina.base=$CATALINA_BASE
이런 식으로 옵션을 주면 제가 위에서 한대로 Tomcat2와 Tomcat3 instance를 위한 
catalina2.sh와 catalina3.sh 만들 필요없이 되는 걸로 써 있습니다.
그래서 /usr/local/tomcat/bin/catalina.sh start -Dcatalina.base=/usr/local/tomcat2
("/usr/local/tomcat2" 따옴표 붙여서도 해 봤음)
로 실행을 시키면,
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JAVA_HOME:       /usr/java/j2sdk
라고 log가 나옵니다. 그러니까 첫 번째 Tomcat만 실행 되는 거죠.

제가 알고 싶은거 Tomcat의 여러 instance를 실행 시키려면 제가 한대로 catalina.sh를 
여러개 복사하고 편집해서 실행을 해야 하는 건지? 아니면
첫번째 Tomcat에서 catalina.sh start [옵션] 으로 여러 Tomcat instance를 실행 시킬 
수 있는 건지? 옵션을 주어 여러 Tomcat instance를 실행 시키면 어떤 옵션이 필요한
건지? 아니면 더 좋은 방법이 있는 지요? 알고 싶습니다.


출처 - http://www.okjsp.pe.kr/seq/67200

===================================================================================



보통 일반 서버에 아파치, 톰캣 1 이렇게 띄워서 실행한다.
내가 테스트를 해보니, cpu 갯수만큼 톰캣을 띄우는 것이 가장 최적화되었다고 생각한다. (ppt 만들어서 보고까지 했음..)

그렇지만 굳이 성능뿐 아니라 톰캣의 비정상적 종료에 대해서 해결이 가능하다는 것이다.

톰캣 하나가 비정상적인 종료를 할 때, worker 설정으로 다른 서버를 보게 하는 설정보다는 같이 띄워져 있는 서버를 보게 하는 것이 해놓았다.


vi /usr/local/apache/conf/workers.properties
# worker list
worker.list=tomcat
# Tomcat Load Balancer
worker.tomcat.type=lb
worker.tomcat.balance_workers=tomcat8009,tomcat8010
# 8009 Tomcat
worker.tomcat8009.type=ajp13
worker.tomcat8009.port=8009
worker.tomcat8009.lbfactor=1
worker.tomcat8009.socket_timeout=5
# 8010 Tomcat
worker.tomcat8010.type=ajp13
worker.tomcat8010.port=8010
worker.tomcat8010.lbfactor=1
worker.tomcat8010.socket_timeout=5

timeout 처리가 되어 있어 5초동안 응답이 없으면, 해당 톰캣을 빼도록 되어 있다. 
잠깐이지만, 서버가 alive 상태로 있게 하고, 그 문제를 빨리 모니터링 서버에서 캐취해서 어드민 담당자에게 처리 할 수 있도록 하는 것이다..
사실 유지보수 차원에서도 이게 좀 편하다.. 프로젝트만 200개, 서버만 1000대 관리하는데...

worker설정에 다른 서버 ip 적어서 관리하는 것은 상상할 수 없다. 시스템 설정은 최대한 단순하게.. 그리고 배포가능하고 문제를 빨리 파악하게 하는 것이 좋다..

개인적으로 worker를 가지고 다른 ip를 보도록 하는 것은 유지보수 특성상 좋지 않아 보인다고 생각한다. 톰캣을 하나 더 올리는 것이 낫다.


톰캣이 2개여서 좋은 이유는 바로 이 것 같습니다바로 톰캣 하나가 비정상적인 종료를 하더라도 하나가 바쳐줄 수 있다라는 것입니다.

Cpu 개수(표준 서버 cpu 2)에 맞춰서 tomcat 인스턴스를 늘이는 것이 부하를 줄이는 부분과  load balancing을 하는 부분에서 탁월하다는 것이 제 생각입니다.



출처 - http://knight76.tistory.com/entry/%ED%95%9C-%EC%84%9C%EB%B2%84%EC%97%90-%ED%86%B0%EC%BA%A3%EC%9D%B4-%EC%97%AC%EB%9F%AC%EA%B0%9C%EC%97%AC%EC%84%9C-%EC%A2%8B%EC%9D%80-%EC%A0%90























Posted by linuxism
,