Linux WEB

Apache-Tomcat Multi Instance 설정

2015.05.28 20:10

호스트웨이 조회 수:3370

1. Apache Tomcat Multi Instance

개발 환경 위한 개발, 스테이징, 상용 의 목적으로 웹서버를 구축할 시 해당 용도에 따른

 

물리적으로 분리된 환경을 구성하여 웹서비스 구동이 필요한 경우, 서로 다른 환경 변수 설정 및

 

분리된 디렉토리로 해당 인스턴스 별 구동 및 정지가 가능한 환경을 말합니다.

 

 multi instance.png

2. 설치 과정


Tomcat JAVA 설치는 FAQ Tomcat 서버 구축 문서 등을 참조하시기 바랍니다.

 

본 문서에서는 java home=/usr/local/java, tomcat home=/usr/local/tomcat 이며,

버전의 경우 java version="1.8.0_45" apache-tomcat version ="8.0.23" 입니다.

 

3. 환경 변수 등록

vi /etc/profile 의 최하단에 아래와 같이 등록

JAVA_HOME=/usr/local/java

CATALINA_HOME=/usr/local/tomcat

Source /etc/profile 로 적용

 

4. apache tomcat 실행 유저 및 그룹 생성

groupadd webuser

useradd -g webuser -s /usr/sbin/nologin webuser

 

 

5. 인스턴스 별 디렉터리 및 환경 설정 디렉터리 생성

 

본 문서에는 /home/apache-tomcat/instance-01 과 같은 형식으로 지정하겠습니다.


[root@mail local]# cd /home/

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01/bin

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01/conf

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01/logs

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01/temp

[root@mail home]# mkdir -p /home/apache-tomcat/instance-01/webapps/ROOT

 

Apache Tomcat conf 설정 파일을 새로 생성하는 Instance 폴더로 복사합니다.

[root@mail home]# cp /usr/local/tomcat/conf/* /home/apache-tomcat/instance-01/conf

 

Apache Tomcat Instance conf/server.xml 파일 편집합니다.

[root@mail home]# vim /home/apache-tomcat/instance-01/conf/server.xml

(맨 좌측 숫자는 행 번호 입니다.)

 

22 <Server port="${tomcat.port.shutdown}" shutdown="SHUTDOWN">

 

69         <Connector port="${tomcat.port.http}" protocol="HTTP/1.1"

70                 connectionTimeout="20000"

71                 redirectPort="${tomcat.port.https}"

72                 URIEncoding="UTF-8" />

 

92        <Connector port="${tomcat.port.ajp}" protocol="AJP/1.3" redirectPort="${tomcat.port.https}" URIEncoding="UTF-8" /    >

 

6. 시작 스크립트를 생성 합니다.

[root@mail home]# vim /home/apache-tomcat/instance-01/bin/tomcat.sh

 

아래의 설정값을 다른 Instance 와 중복되지 않도록 설정한 후 저장합니다.

* SERVER_NAME : Apache Tomcat Instance 폴더명을 입력합니다.

* export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.shutdown=8505" #Shutdown Port
* export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.http=8580" #HTTP Port
* export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.https=8943" #HTTPS Port
* export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.ajp=8509" #AJP Port

* export CATALINA_HOME=/usr/local/tomcat 아파치톰캣의 설치 경로 입니다.

* export CATALINA_BASE=/home/apache-tomcat/$SERVER_NAME 인스턴스 경로 입니다.


#!/bin/bash
 
# chkconfig: 2345 95 20
# description: instance-01
# processname: instance-01
 
SERVER_NAME=instance-01
TOMCAT_USER=webuser
SHUTDOWN_WAIT=10
UNAME=`id -u -n`
 
export JAVA_OPTS="-server"
export JAVA_OPTS="$JAVA_OPTS -Xms256m"
export JAVA_OPTS="$JAVA_OPTS -Xmx256m"
export JAVA_OPTS="$JAVA_OPTS -XX:NewSize=128m"
export JAVA_OPTS="$JAVA_OPTS -XX:MaxNewSize=128m"
export JAVA_OPTS="$JAVA_OPTS -XX:PermSize=128m"
export JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m"
export JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
 
export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.shutdown=8505"
export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.http=8580"
export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.https=8943"
export JAVA_OPTS="$JAVA_OPTS -Dtomcat.port.ajp=8509"
 
export CATALINA_HOME=/opt/apache-tomcat
export CATALINA_BASE=/app/apache-tomcat/$SERVER_NAME
export CATALINA_OPTS="$CATALINA_OPTS -Djava.security.egd=file:/dev/./urandom"
 
tomcat_pid() {
    echo `ps aux | grep "$CATALINA_BASE[ ]" | grep -v grep | awk '{ print $2 }'`
}
 
start() {
    pid=$(tomcat_pid)
 
    if [ -n "$pid" ]
    then
        echo "Tomcat is already running (pid: $pid)"
    else
        echo "Starting tomcat (pid: $pid)"
 
        if [ e$UNAME = "eroot" ]
        then
            ulimit -n 100000
            umask 007
            /bin/su -p -s /bin/sh $TOMCAT_USER $CATALINA_HOME/bin/startup.sh
        else
            $CATALINA_HOME/bin/startup.sh
        fi
    fi
 
    return 0
}
 
stop() {
    pid=$(tomcat_pid)
 
    if [ -n "$pid" ]
    then
        echo "Stoping Tomcat"
 
        if [ e$UNAME = "eroot" ]
        then
            /bin/su -p -s /bin/sh $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh
        else
            $CATALINA_HOME/bin/shutdown.sh -force
        fi
 
        let kwait=$SHUTDOWN_WAIT
        count=0;
        until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
        do
            echo -n -e "\nwaiting for processes to exit (pid: $pid)\n";
            sleep 1
            let count=$count+1;
        done
 
        if [ $count -gt $kwait ]; then
            echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds (pid: $pid)"
            kill -9 $pid
        fi
    else
        echo "Tomcat is not running"
    fi
 
    return 0
}
 
case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
            echo "Tomcat is running with pid: $pid"
        else
            echo "Tomcat is not running"
        fi
        ;;
    *)
        echo $"Usage : $0 {start|stop|restart}"
        exit 1
esac
exit 0


실행 스크립트 권한 변경

[root@mail home]# chmod 755 apache-tomcat/instance-01/bin/tomcat.sh

 

인스턴스 사용자 권한 변경

[root@mail home]# chown -R webuser.webuser apache-tomcat/instance-01

 

간단한 jsp 문서를 만들어서 테스트 하여 봅니다.

[root@mail ROOT]# vim apache-tomcat/instance-01/webapps/ROOT/index.jsp

 

<%-- test.jsp --%>

 

<%@ page language="java" %>

 

<%!

 

int a= 100;

 

int b= 200;

 

%>

 

<%

 

int c= 0;

 

c=a+b;

 

%>

 

<html>

 

<head><title> JSP Test </title></head>

 

<body>

 

a= <%=a%><br>

 

b= <%=b%><br>

 

c= <%=c%>

 

</body>

 

</html>




http://서버IP:8580 으로 연결 되면 성공

아래와 같은 결과가 출력되면 정상 동작 중

a=100

b=200

c=300


포트 및 인스턴스 디렉터리 경로등에 유의하여 멀티 인스턴스를 생성하시면 되겠습니다.