아파치 웹서버(2.4)와 톰캣 연계 및 WAS 이중화
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 를 참고하자.