본문으로 바로가기

안녕하세요.

오늘은 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>

 

 

 

 

감사합니다.

 

궁금한 것, 잘안되는 것은 문의 남겨주시면 성실히 답변해 드리겠습니다.