안녕하세요.
오늘은 WEB/WAS 연동을 해볼텐데요.
실무에 활용 가능하도록 로드밸런싱과 세션클러스터링을 이용하여 WEB/WAS를 구축해보도록 하겠습니다.
우선, 들어가기에 앞서 로드밸런싱과, 세션클러스터링의 기능에 대해서 간단히 알아보겠습니다.
로드밸런싱 :
정적인 처리를 하는 WEB서버와 달리 WAS는 서버단에서 어플리케이션이 동작 할 수 있도록 동적 처리를 담당합니다.
때문에 Web서버에 비해 부하가 상대적으로 많고, 가용성 또한 중요합니다.
그래서 로드밸런싱이라는 기능을 사용하여 Web서버에 들어온 요청을 다수의 WAS서버에 분산하여 부하가 덜 가도록
하고 혹, 한대가 장애발생 하더라도 서비스는 계속 될 수 있도록 가용성을 보장해 줍니다.
세션클러스터링 :
세션 정보를 해당 서버에만 보존하는 것이 아니라, 로드밸런싱한 다른 서버에도 공유함으로써 1대의 서버가 장애로 인하여
서비스를 못한다 하더라도 해당 세션 정보값을 그대로 다른 서버에서 이어받아 서비스를 지속 할 수 있는 기능입니다.
사용자가 로그인 한 WAS 서버에 장애가 발생 하였다고 예를 들어보겠습니다.
세션클러스터링 O : 다른 서버로 접속 되더라도 세션 그대로 이어 받아 사용자가 장애를 체감 할 수 없슴
세션클러스터링 X : 다른 서버로 접속 되면서 세션을 잃기 때문에 사용자가 재로그인 해야 하는 불편함 발생
[셋팅]
① WEB 서버 : 1대
- IP : 192.168.37.132
- s/w : Apache 2.2 & mod_jk 셋팅
② WAS 서버 : 2대 (Tomcat7)
- IP : 192.168.37.133 / 192.168.37.134
- s/w : Jdk 1.7이상 , Tomcat 7
[조건]
① WEB 서버는 요청을 2대의 Tomcat에 부하 분산한다.
② WAS 한 대가 Shutdown 되면, 다른 WAS가 서비스를 대신한다.
③ WAS 는 서로 세션을 공유한다.
- ①,②번 Apache mod_jk를 이용한 로드밸런싱 기능
- ③번 Tomcat 세션 클러스터링 기능
[설정]
1. Apache Web Server 작업
httpd.conf 파일 내용 추가
# Apache to Tomcat connector
LoadModule jk_module modules/mod_jk.so
<ifModule jk_module>
JkWorkersFile /etc/httpd/conf/workers.properties
JkShmFile /etc/httpd/run/mod_jk.shm
JkLogFile /etc/httpd/run/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /* ajp13
</ifModule>
workers.properties 파일 생성 및 내용 추가
worker.list=ajp13
worker.ajp13.type=lb
worker.ajp13.balanced_workers=was1,was2
worker.loadbalancer.sticky_session=1
worker.was1.type=ajp13
worker.was1.host=192.168.37.133
worker.was1.port=8009
worker.was1.lbfactor=1
worker.was2.type=ajp13
worker.was2.host=192.168.37.134
worker.was2.port=8009
worker.was2.lbfactor=1
2. Tomcat WAS Server 작업
server.xml 파일 내용 추가
- 아래 내용 전체 복사 붙여 넣기 하되, 초록색 글씨는 WAS1, WAS2 각 각의 IP를 알맞게 기입
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.37.133"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
server.xml 파일 내용 수정
- 아래 내용 중 초록색 글씨 부분을 각 was에 맞게 알맞게 기입 (workers.properties 에서 설정 한 대로)
<Engine defaultHost="localhost" name="Catalina" jvmRoute="was1">
WEB-INF\web.xml 파일 내용 추가
- <distributable/> 문구를 아래와 같이 추가
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<distributable/>
</web-app>
감사합니다.
궁금한 것, 잘안되는 것은 문의 남겨주시면 성실히 답변해 드리겠습니다.