티스토리 뷰

Skill/spring

[Tomcat] 멀티 인스턴스 설정

진열사랑 2020. 9. 15. 18:23

출처 : allonsyit.tistory.com/11

 

[Windows 10 - Tomcat 설치 및 멀티 인스턴스 설정]

Tomcat 설치 1. Tomcat 다운로드 - zip 파일 다운로드 https://tomcat.apache.org/download-70.cgi Apache Tomcat® - Apache Tomcat 7 Software Downloads Welcome to the Apache Tomcat® 7.x software download..

allonsyit.tistory.com

1. 인스턴스를 만들어줄 폴더를 생성

 

D:\001_dev\WAS\Tomcat7\instance1

D:\001_dev\WAS\Tomcat7\instance2

 

[참고]

  • 톰캣 엔진 - bin, lib 폴더
  • 톰캣 인스턴스 - conf, logs, temp, work, webapps 폴더

2. 인스턴스 폴더

 

1) 톰캣 폴더에 있는 conf, webapps 파일을 복사하여 인스턴스 폴더에 붙여넣기

 

2) bin, logs, temp, work 폴더 만들어주기

 

3. bin 폴더 하위에 startup.bat, shutdown.bat 파일 만들기

 

startup.bat

set JAVA_HOME=D:\001_dev\jdk\java-se-8u41-ri
set CATALINA_HOME=D:\001_dev\WAS\Tomcat7\apache-tomcat-7.0.100
set CATALINA_BASE=D:\001_dev\WAS\Tomcat7\instance1
%CATALINA_HOME%/bin/startup.bat

shutdown.bat

set JAVA_HOME=D:\001_dev\jdk\java-se-8u41-ri
set CATALINA_HOME=D:\001_dev\WAS\Tomcat7\apache-tomcat-7.0.100
set CATALINA_BASE=D:\001_dev\WAS\Tomcat7\instance1
%CATALINA_HOME%/bin/shutdown.bat

 

4. 인스턴스/conf/server.xml 수정

 

포트가 겹치지 않도록 server.xml 포트 수정

 

Server port

ex. <Server port="8005" shutdown="SHUTDOWN">

-> <Server port="8015" shutdown="SHUTDOWN">

 

Connector port, redirectPort

ex. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

-> <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8453"/>

 

5. bin/startup.bat 실행하여 확인해보기

http://localhost:8090

 

-----------

생성한 서비스의 war 파일명을 ROOT(만약, metasystem.war)로 하지 않은 경우 반드시 Context의 docBase값을 설정해야 한다. 그렇지 않으면 404에러가 발생한다.

<Context docBase="metasystem" path="/" reloadable="true">

 

<Context>를 지정하지 않을 경우 default 값으로 ROOT가 지정이 되어 하위에 ROOT폴더가 필요하다. 

 

------------------

 

 

Tomcat Multi Instance 설정하기 전에 용어를 설명하겠습니다. Tomcat 은 엔진과 인스턴스(Intance) 로 나뉩니다. 이는 디렉토리별로 구분이 가능한데, 엔진부분과 인스턴스 부분의 디렉토리는 다음과 같습니다.

  • Tomcat Engine 부분: bin, lib
  • Tomcat Instance 부분: conf, logs, temp, work, webapps

각각의 Tomcat Instance 는 각각의 자바 웹 애플리케이션들이기 때문에 서로 가진 설정들에서 포트(port)를 변경해줍니다. Tomcat 의 포트는 다음과 같은 것들이 있습니다.

  • Shutdown port: 이 포트는 톰캣을 셧다운하는데 사용되어 집니다. shutdown.sh 스크립트가 호출되면 이 포트로 시그널(Signal)을 보냅니다. 이 포트는 Tomcat 자바 프로세스로 리스닝되고 있습니다. 만약 시그널을 받으면, 프로세스는 종료됩니다.
  • Connector port: 이 포트는 외부 클라이언트에게 애플리케이션을 보여주기위한 실제적인 포트 입니다.
  • Ajp port: 이 포트는 웹 서버가 Tomcat 과 커뮤니케이션을 위해서 사용되어 집니다. 또, 이 포트는 로드 밸런스 서버를 세팅할때에도 사용되어 집니다.
  • Redirect port: SSL 접속 요청이 들어올경우에 Catalina 는 자동적으로 이 포트로 redirect 합니다.

각각의 Tomcat Instance 는 위에서 나열한 포트들이 중복되지 않도록 설정해 줍니다. 이 설정은 각 인스턴스의 server.xml 파일에 정의되어 있습니다.

<Server port="8105" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
....
<Connector port="8180" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="81443" />
....
<Connector port="8109" protocol="AJP/1.3" redirectPort="81443" />
 
 
<!-- instance2 ports -->
<Server port="8205" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
....
<Connector port="8280" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="82443" />
....
<Connector port="8209" protocol="AJP/1.3" redirectPort="82443" />
 
 
<!-- instance3 ports -->
<Server port="8305" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
....
<Connector port="8380" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="83443" />
....
<Connector port="8309" protocol="AJP/1.3" redirectPort="83443" />

 

각각의 인스턴스들에 대해서 start.sh, shutdown.sh 를 다음과 같이 만들어 줍니다.

start.sh

#!/bin/sh
 
export INSTANCE_OWNER=instance1
export CATALINA_HOME=/opt/tomcat-7
export CATALINA_BASE=/home/$INSTANCE_OWNER
export CATALINA_PID=/home/$INSTANCE_OWNER/conf/instance1.pid
 
export JMX_OPTS=" -Dcom.sun.management.jmxremote \
                 -Dcom.sun.management.jmxremote.port=8090 \
                 -Dcom.sun.management.jmxremote.authenticate=false \
                 -Djava.rmi.server.hostname=localhost \
                -Dcom.sun.management.jmxremote.ssl=false "
 
#export MEM_OPTS="-Xms4G -Xmx4G -XX:PermSize=256m -XX:MaxPermSize=256m"
# ParallelGC
export JVM_OPTS="-XX:NewRatio=3 -XX:ParallelGCThreads=4 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/instance1/logs -verbosegc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/instance1/logs/gc_`date "+%Y%m%d%H"`.log -Djava.security.egd=file:/dev/./urandom"
# CMS GC
#export JVM_OPTS="-XX:NewRatio=7 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSFullGCsBeforeCompaction=0 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/instance1/logs -verbosegc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/instance1/logs/gc_`date "+%Y%m%d%H"`.log -Djava.security.egd=file:/dev/./urandom"
 
export CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS} ${JVM_OPTS}"
 
/bin/su -p -s /bin/sh $INSTANCE_OWNER $CATALINA_HOME/bin/startup.sh

 

shutdown.sh

#!/bin/sh
 
export INSTANCE_OWNER=instance1
export CATALINA_HOME=/opt/tomcat-7
export CATALINA_BASE=/home/$INSTANCE_OWNER
export CATALINA_PID=/home/$INSTANCE_OWNER/conf/instance1.pid
 
/bin/su -p -s /bin/sh $INSTANCE_OWNER $CATALINA_HOME/bin/shutdown.sh

[출처] TOMCAT 톰캣 멀티인스턴스 구성 방법|작성자 하나자바

 

 

■ AJP 란?

AJP는 웹서버(Apache) 뒤에 있는 어플리케이션 서버로부터 웹서버로 들어오늘 요청을 위임할 수 있는 바이너리 프로토콜이다.

 

어플리케이션 서버로 핑을 할 수 있는 웹서버의 모니터링 기능을 지원한다.

 

웹 개발자들은 대체로 AJP를 여러 웹서버로 부터 여러개 어플리케이션 서버로의 로드 밸런스 구현에 이용한다. 세션들의 각각의 어플리케이션 서버 인스턴스의 이름을 갖는 라우팅 메카니즘을 사용하는 현재 어플리케이션 서버로 리다이렉트된다. 이 경우 어플리케이션 서버를 위한 리버스 프록시로 웹서버는 동작한다.

 

■ mod_jk 란?

아파치, 톰캣 연동을 위해 mod_jk라는 모듈을 사용하는데, 이는 AJP프로토콜을 사용하여 톰캣과 연동하기 위해 만들어진 모듈이다. mod_jk는 톰캣의 일부로 배포되지만, 아파치 웹서버에 설치하여야 한다.

 

동작방식

1. 아파치 웹서버의 httpd.conf에 톰캣 연동을 위한 설정을 추가하고 톰캣에서 처리할 요청을 지정한다.

2. 사용자의 브라우저는 아파치 웹서버(보통 포트80)에 접속해 요청한다.

3. 아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된 요청인지 확인 후, 톰캣에서 처리해야 하는 경우 아파치 웹서버는 톰캣의 AJP포트(보통 8009포트)에 접속해 요청을 전달한다.

4. 톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를 아파치 웹서버에 되돌려 준다.

5. 아파치 웹서버는 톰캣으로부터 받은 처리 결과를 사용자에게 전송한다.

 

■ Apache와 Tomcat을 연동해야 하는 이유

Tomcat은 WAS 서버이지만 Web 서버의 기능도 갖추고 있는 WAS 서버입니다.

그러나 톰캣의 Web 서버 기능은 아파치보다 느린 속도처리를 보였고, 이로 인해 정적인 페이지는 Apache가 처리하고, 동적인 페이지를 Tomcat이 처리함으로써 부하를 분산하는 이유에서 Apache와 Tomcat을 연동하였습니다.

 

그러나 이는 옛날 얘기이고.. 지금은 Tomcat이 많이 발전해 Tomcat 내의 Web 서버가 아파치에 절대 뒤쳐지지

않을만큼의 역할을 수행합니다.

그럼에도 불구하고 아직도 Apache와 Tomcat을 연동하여 사용하는 이유는, 아파치 내에서만 설정할 수 있는 부분이라던가 아파치에서 제공하는 유용한 모듈들을 톰캣에서 사용할 수 없기 때문입니다.


출처: https://noobnim.tistory.com/26 [공부하는 블로그]

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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 31
글 보관함