2014년 3월 17일

CentOS 6.5 에서 다중 톰켓 환경 구축하기

아파치는 CentOS 6.5 에 포함된 것을 사용함

1. Tomcat & Java 설치 

톰켓 설치에 앞서 http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 설치파일을 다운로드하여 JAVA 를 설치한다. 문서에서는 JDK 1.7.0.51 버전의 rpm 파일로 설치하였다. 설치된 java 는 /usr/java 에 설치된다.

톰켓 설치파일은 http://tomcat.apache.org 에서 최신 프로그램를 다운로드한다. 문서에서는 Tomcat 8.0.3 버전을 사용하였다. 설치는 특별한 것을 요구하지 않으며 압축을 풀는 것으로 기본적은 설치는 완료된다. 문서에서는 /app/tools 경로에 압축을 풀었으며, 편의상 실재 설치된 경로를 /app/tomcat 경로로 심볼릭 링크를 생성하여 /app/tomcat 경로로 접근이 가능하도록했다.

 2. 웹 서버 연결을 위한 Tomcat Connectors 설치

Tomcat Connector 설치는 컴파일 작업이 필요하며 소스는 http://tomcat.apache.org 에서 다운로한다. 컴파일을 진행하려면 Apr 라이브러리가 필요하며 문서에서는 httpd-devel 패키지를 설치하여 사용하였다. httpd-devel 는 yum 을 사용하여 설치하였다.

# yum install httpd-devel
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: centos.mirror.cdnetworks.com
 * extras: centos.mirror.cdnetworks.com
 * updates: centos.mirror.cdnetworks.com
base                                                     | 1.1 kB     00:00
base/primary                                             | 995 kB     00:00
base                                                                  2789/2789
extras                                                   | 2.1 kB     00:00
extras/primary_db                                        | 164 kB     00:00
updates                                                  | 1.9 kB     00:00
updates/primary_db                                       | 332 kB     00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd-devel.i386 0:2.2.3-83.el5.centos set to be updated
--> Processing Dependency: httpd = 2.2.3-83.el5.centos for package: httpd-devel
--> Processing Dependency: apr-util-devel for package: httpd-devel
--> Running transaction check
---> Package apr-util-devel.i386 0:1.2.7-11.el5_5.2 set to be updated
--> Processing Dependency: httpd = 2.2.3-76.el5.centos for package: mod_ssl
---> Package httpd.i386 0:2.2.3-83.el5.centos set to be updated
--> Running transaction check
---> Package mod_ssl.i386 1:2.2.3-83.el5.centos set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch      Version                       Repository    Size
================================================================================
Installing:
 httpd-devel         i386      2.2.3-83.el5.centos           updates      155 k
Installing for dependencies:
 apr-util-devel      i386      1.2.7-11.el5_5.2              base          53 k
Updating for dependencies:
 httpd               i386      2.2.3-83.el5.centos           updates      1.2 M
 mod_ssl             i386      1:2.2.3-83.el5.centos         updates       97 k

Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       2 Package(s)

Total download size: 1.5 M
Is this ok [y/N]: y
Downloading Packages:
(1/4): apr-util-devel-1.2.7-11.el5_5.2.i386.rpm          |  53 kB     00:00
(2/4): mod_ssl-2.2.3-83.el5.centos.i386.rpm              |  97 kB     00:00
(3/4): httpd-devel-2.2.3-83.el5.centos.i386.rpm          | 155 kB     00:00
(4/4): httpd-2.2.3-83.el5.centos.i386.rpm                | 1.2 MB     00:00
--------------------------------------------------------------------------------
Total                                           4.6 MB/s | 1.5 MB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : apr-util-devel                                           1/6
  Updating       : httpd                                                    2/6
  Installing     : httpd-devel                                              3/6
  Updating       : mod_ssl                                                  4/6
  Cleanup        : mod_ssl                                                  5/6
  Cleanup        : httpd                                                    6/6

Installed:
  httpd-devel.i386 0:2.2.3-83.el5.centos

Dependency Installed:
  apr-util-devel.i386 0:1.2.7-11.el5_5.2

Dependency Updated:
  httpd.i386 0:2.2.3-83.el5.centos      mod_ssl.i386 1:2.2.3-83.el5.centos

Complete!

이제 다운로드한 톰켓 커낵터 소스를 컴파일하여 이미 설치되어 있는 httpd 모듈에 설치한다.

cd /app/source/tomcat-connectors-1.2.37-src/native
./configure --with-apxs=/usr/sbin/apxs
make
make install

3. 아파치 웹 서버 환경 설정

/etc/httpd/conf.d/tomcat.conf 파일을 다음과 같이 생성한다.

/etc/httpd/conf.d/tomcat.conf


LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log"
JkLogLevel info

톰켓 연결정보를 기술하는 workers.properties 파일을 다음과 같이 생성한다. 

/etc/httpd/conf/workers.properties (환경에 따른 수정 필요)

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

여러 톰켓을 구동할 수 있도록 /etc/httpd/conf/httpd.conf 파일에 VirtualHost 설정을 추가한다. 이때 JkMountFile 을 지정하여 어떤 요청들을 어떤 톰켓이 처리할 것인가를 지정한다. 

/etc/httpd/conf/httpd.conf (환경에 따른 수정 필요)

    DocumentRoot  /app/webapps/portal/WebContent
    ServerName portal
    ErrorLog logs/portal-error_log
    JkMountFile conf/uriworkermap.properties

/etc/httpd/conf/uriworkermap.properties (환경에 따른 수정 필요)

/*.do=worker1
/*.jsp=worker1

4. 다중 인스턴스 Tomcat 환경 구성

톰켓 인스턴스를 다중으로 구동할 수 있도록  /app/tools/ 경로에 설치된 톰켓을 직접 사용하지 않고 /app/servers 경로를 생성하고 이곳에 톰켓을 다시 아래와 같은 방식으로 구성한다.


  • /app/servers/[인스턴스 명]-tomcat/
  • /app/servers/[인스턴스 명]-tomcat/bin (/app/tomcat/bin 심볼링 링크)
  • /app/servers/[인스턴스 명]-tomcat/lib  (/app/tomcat/lib 심볼링 링크)
  • /app/servers/[인스턴스 명]-tomcat/conf (/app/tomcat/conf 복사)
  • logs, temp, webapps, work 디렉터리 생성.


문서에서는 developer 계정으로 톰켓을 운영하는데 이를 위하여 /app/tools 와 /app/servers 의 소유권을 developer 로 변경한다.


톰켓 운영을 위하서 developer 계정의  홈에 bin 디렉터리를 생성하고 add-new-tomcat 스크립트를 아래와 같이 생성한다.


#!/bin/sh

if [ "$#" == "0" ]; then
    echo "tomcat instance name required."
    exit 1
fi

SERVERS_HOME=/app/servers
SERVER_NAME=$1
SERVER_PATH="$SERVERS_HOME/$SERVER_NAME-tomcat"
TOMCAT_HOME=/app/tomcat


echo "new tomcat will create in "$SERVER_PATH"....."

if [ -d "$SERVER_PATH" ]; then
    echo "directory '$SERVER_PATH' already exist. check first."
    exit 1
fi

mkdir $SERVER_PATH
mkdir $SERVER_PATH/logs $SERVER_PATH/temp $SERVER_PATH/webapps $SERVER_PATH/work
cp -Rf $TOMCAT_HOME/conf $SERVER_PATH
ln -s $TOMCAT_HOME/bin $SERVER_PATH/bin
ln -s $TOMCAT_HOME/lib $SERVER_PATH/lib



이제 add-new-tomcat [새로운 인스턴스 이름] 명령으로 손쉽게 톰켓 환경을 추가할 수 있다. 톰켓 환경이 추가되면 반듯이 해당 톰켓 설정의 sever.xml 파일에서 Server 노드 shutdown, Connector 노드 port 와 redirectPort 포트를 사용하지 않는 다른 값으로 변경하여야 한다. 개인적으로는 새로운 톰켓이 추가되는 경우 각 포트에 +1 값을 지정한다. 톰켓이 추가되면 아파치 설정 파일에서 httpd.conf, workers.properties 그리고 uriworkermap.properties 설정을 변경할 필요가 있다.

conf/server.xml


     


추가로 인스턴스에 따라 톰켓을 시작, 정지, 로그보기를 위한 스크립트를 생성한다.

/home/developer/bin/tdown (톰켓 정지)

#!/bin/sh

if [ "$#" == "0" ]; then
    echo "tomcat instance name required."
    exit 1
fi

SERVER_HOME=/app/servers

SERVER_NAME=$1

SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"

$SERVER_PATH/bin/shutdown.sh
/home/developer/bin/tboot (톰켓 시작)

#!/bin/sh

if [ "$#" == "0" ]; then
    echo "tomcat instance name required."
    exit 1
fi

SERVER_HOME=/app/servers

SERVER_NAME=$1

SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"

PROCESS_COUNT=$( ps -ef | grep java | grep $SERVER_NAME  | wc -l  )

if [ "$PROCESS_COUNT" -eq 1 ] ; then
    echo "tomcat instance '$SERVER_NAME' already running...."
    exit 1
    else
    echo "starting tomcat instance '$SERVER_NAME'  .. "
    $SERVER_PATH/bin/startup.sh
fi


#$SERVER_PATH/bin/startup.sh


/home/developer/bin/tdown (톰켓 정지)

#!/bin/sh

if [ "$#" == "0" ]; then
    echo "tomcat instance name required."
    exit 1
fi

SERVER_HOME=/app/servers

SERVER_NAME=$1

SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"

$SERVER_PATH/bin/shutdown.sh

/home/developer/bin/tlog (톰켓 로그보기)

#!/bin/sh

if [ "$#" == "0" ]; then
    echo "tomcat instance name required."
    exit 1
fi

SERVER_HOME=/app/servers

SERVER_NAME=$1

SERVER_PATH="$SERVER_HOME/$SERVER_NAME-tomcat"

echo  "$SERVER_PATH/logs/catalina.out"

tail -f "$SERVER_PATH/logs/catalina.out"

손쉬운 톰켓 운영을 위하여 공통으로 적용할 몇가지 환경 변수를 developer 계정에 추가한다. 참고로 JAVA_OPTS 값은 모든 톰켓이 시작할 때 공통으로 적용된다.

 /home/developer/.bash_profile
export JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms256m -Xmx512m -XX:NewSize=125m -XX:MaxNewSize=125m -XX:PermSize=125m -XX:MaxPermSize=125m -XX:+DisableExplicitGC"

export JAVA_HOME=/usr/lib/java



댓글 없음:

댓글 쓰기