개발

아파치 웹서버(2.4)와 톰캣 연계 및 WAS 이중화

에드몽단테스 2019. 4. 29. 13:51

1. 톰캣 설치


개요
톰캣은 8.x으로 다운로드 받는다. 로드 밸런싱을 위한 것인데, 8버전이 아닌 다른 버전일 경우 테스트가 필요하다.

다운로드
# wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz

압축해제
# tar xvf apache-tomcat-8.5.32.tar.gz
# mkdir /webapps
# mv apache-tomcat-8.5.31 /webapps/tomcat8_was1

튜닝
톰캣의 성능 개선을 위해 /webapps/tomcat8_was1/bin/catalina.sh 안에 아래의 코드를 추가한다.
힙메모리 설정인데, -Xms1024M -Xmx1024M 부분을 1024 혹은 2048로 설정한다.

# vi catalina.sh

JAVA_OPTS="-Xms1024M -Xmx1024M -XX:NewSize=256M -XX:MaxNewSize=256M -XX:PermSize=256M  -XX:+DisableExplicitGC"

톰캣 기동 및 종료

# cd /webapps/tomcat8_was1/bin/
# sh startup.sh (기동)
# sh shutdown.sh (종료)

브라우저에서 정상적으로 동작하는지 확인한다. 톰캣은 기본포트를 8080을 이용한다.

http://localhost:8080

 

2. 아파치 설치


아파치는 2.4 버전을 설치한다. 설치는 2.2와는 조금 다르다. 2.2설치시 기본적으로 포함되었던 것들이 2.4버전에는 별도로 빠지면서, 설치시 필요한 파일들을 직접 다운로드 받아 설치해야한다.

 

apr 설치

# wget http://apache.mirror.cdnetworks.com/apr/apr-1.5.0.tar.gz
# tar -xvzf apr-1.5.0.tar.gz
# cd apr-1.5.0

# ./configure --prefix=/usr/local/apr
# make
# make install

 

apr-util 설치

# wget http://apache.mirror.cdnetworks.com/apr/apr-util-1.5.3.tar.gz
# tar -xvzf apr-util-1.5.3.tar.gz
# cd apr-util-1.5.3
# ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-util
# make
# make install

 

pcre 설치

# wget http://sourceforge.net/projects/pcre/files/pcre/8.31/pcre-8.31.tar.gz/download
# mv download pcre-8.31.tar.gz
# tar xvfz pcre-8.31.tar.gz
# cd pcre-8.31
# ./configure --prefix=/usr/local/pcre
# make
# make install

apr 또는 apr-util은 yum으로도 설치가 가능하나 버전이 낮아서 아파치 설치시 동작하지 않는 경우가 있다. 꼭 소스 컴파일하자.
Apache2.4 설치

# wget http://apache.tt.co.kr/httpd/httpd-2.4.33.tar.gz
# tar xvf httpd-2.4.33.tar.gz
# cd httpd-2.4.33
# ./configure --prefix=/webapps/apache2 --enable-module=shared --enable-rewrite --enable-speling --enable-so --enable-ssl --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util
# make
# make install

컴파일시 make[2]: *** [exports.lo] 오류 1 오류가 생기는 경우가 있는데, yum으로 설치된 apr의 버전이 너무 낮은 경우이다. 이런 경우 yum 에서 패키지를 제거하자.

# yum remove apr

아파치 기동 및 종료
# cd /webapps/apache2/bin
# ./apachectl start (기동)
# ./apachectl stop (종료)

브라우저에서 확인한다. 기본 포트는 80이고 소스는 /webapps/apache2/htdocs 에서 수정가능하다.

http://localhost

 

3. 아파치와 톰캣의 연동


컨넥터 설치

# wget http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.43-src.tar.gz
# tar xvf tomcat-connectors-1.2.43-src.tar.gz
# mv tomcat-connectors-1.2.43-src
# mv native
# ./buildconf.sh
# ./configure --with-apxs=/webapps/apache2/bin/apxs 
# make
# make install

아파치와 톰캣의 연계

tomcat-connectors-1.2.43-src/native/apache-2.0/mod_jk.so 파일을 /webapps/apache2/modules 에 복사한다. (설치시 자동으로 복사되는 듯 하기도 하다.)

아파치 설정 파일 변경
# cd /webapps/apache2/conf
# vi httpd.conf

아래코드를 추가한다.

LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf

DocumentRoot 부분을 톰캣의 ROOT로 변경한다.

# vi mod_jk.conf

JkWorkersFile /webapps/apache2/conf/workers.properties
JkShmFile     /webapps/tomcat8_was1/logs/mod_jk.shm
JkLogFile     /webapps/tomcat8_was1/logs/mod_jk.log
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkMount  /* worker1

# vi workers.properties

worker.list=worker1

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13

아파치와 톰캣을 재기동하고 http://localhost 를 호출 했을 때 톰캣이 정상적으로 보이는지 확인한다.

 

4. 톰캣 이중화 (로드 밸런싱)

톰캣의 부하를 줄이기 위해 톰캣을 2개 설치하고 아파치에서 부하를 두개의 톰캣으로 나눈다.

두 번째 톰캣 설치
# cd /webapps/
# cp -ap tomcat8_was1 tomcat8_was2

톰캣을 두개 가동하면 포트가 충돌나므로 두 번째 톰캣의 포트를 변경해준다.

# vi /webapps/tomcat8_was2/conf/server.xml

shutdown port : 8006
connect port : 8081
ajp port : 8010

두 번째 톰캣이 정상적으로 동작하는지 확인한다.
http://localhost:8081 두번째 톰캣
http://localhost:8080 첫번째 톰캣
http://localhost 아파치 (첫번째 톰캣이 보여야 한다.)

설정파일 변경

# vi /webapps/apache2/conf/mod_jk.conf

하단의 내용중 아래 내용을 변경한다.
JkMount  /* loadballance

# vi /webapps/apache2/conf/ workers.properties

worker.list=worker1,worker2,loadballance

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=100             # 반드시 '0'보다 커야하며, 이것은 job에 대한 비율
worker.worker1.socket_timeout=1800  # 30분
worker.worker1.socket_keepalive=1     # 사용:1, 미사용:0
worker.worker1.connection_pool_timeout=600

worker.worker2.port=8010
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=100             # 반드시 '0'보다 커야하며, 이것은 job에 대한 비율
worker.worker2.socket_timeout=1800  # 30분
worker.worker2.socket_keepalive=1     # 사용:1, 미사용:0
worker.worker2.connection_pool_timeout=600

# tomcat timeout에 따른 중복 발생 방지
worker.loadballance.retries=0
worker.worker1.retries=0
worker.worker2.retries=0

worker.loadballance.type=lb
# sticky방식은 일정 시간(session time)동안 한 WAS에 지속적으로 접속하는 설정임
# 사용: true OR 1, 미사용: false OR 0
worker.loadballance.sticky_session=1
worker.loadballance.balanced_workers=worker1,worker2

vi /webapps/tomcat8_was1/conf/server.xml
vi /webapps/tomcat8_was2/conf/server.xml

위 두 파일을 같이 수정한다.

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" Server=""/>

Server=”” 추가한다.


각 파일의  jvmRoute 에 worker의 이름을 넣어준다.

소스의 WEB-INF/web.xml 에 아래 코드를 추가한다.

 

<distributable/>

모든 서버를 재기동하고, WAS 2개의 로그를 확인하여 브라우저에서 호출시 각각 톰캣의 로그가 정상적으로 생성되는지 확인한다.

 

 

P.S

라이브러리가 업데이트 되면서 일부는 다운로드가 되지 않는다. 사이트에 다시 직접 다운로드 받아야 한다.

또 일부는 라이브러리가 업데이트가 되며서 오류가 발생한다.

tnsgud.tistory.com/185 를 참고하자.

반응형