2015.05.28 20:10
1. Apache Tomcat Multi Instance
개발 환경 위한 개발, 스테이징, 상용 의 목적으로 웹서버를 구축할 시 해당 용도에 따른
물리적으로 분리된 환경을 구성하여 웹서비스 구동이 필요한 경우, 서로 다른 환경 변수 설정 및
분리된 디렉토리로 해당 인스턴스 별 구동 및 정지가 가능한 환경을 말합니다.
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
포트 및 인스턴스 디렉터리 경로등에 유의하여 멀티 인스턴스를 생성하시면 되겠습니다.