티스토리 뷰

728x90
반응형

 포스팅은 Sticky Session을 사용하여 요청을 처리하는 방식을 가이드합니다.


Sticky session이란 쿠키 또는 세션을 사용하여 트래픽을 분산하는 기능입니다.
즉, 특정 사용자가 접속을 시도 했을때 처음 접속된 서버로 계속해서 접속되도록 트래픽을 처리하는 방식입니다.
이번 가이드에서는 Sticky Session을 설정하고 테스트해보도록 하겠습니다.

진행하기 전에 mod_jk 를 이용한 Web-WAS 연동과, Standalone Mode에서의 Clustering환경 구성이 필요하니, 지난 포스팅을 꼭 참고해주세요.

테스트 시나리오

a.클러스터링된 2개의 노드에 각 하나의 application이 deploy되어있으며, 이는 세션 클러스터링이 가능합니다.

b.첫 호출시, 2개의 노드 중 하나의 노드(node1)에서 요청을 처리합니다.

c.두번째 호출시에도, 그 다음 호출에도 sticky session으로 인해 첫 요청을 처리했던 노드(node1)에서 요청을 계속 처리합니다.

d.요청을 처리했던 노드가 shutdown되면, 세션을 라우팅하여 다른 노드(node2)가 요청을 이어받습니다.

1.Web-WAS 연동을 위한 설정


- httpd.conf

###AJP13 Setting For Node1,2
LoadModule jk_module /home/test/apache/modules/mod_jk.so
JkWorkersFile /home/test/apache/conf/workers.properties
JkShmFile /home/test/apache/logs/mod_jk.shm
JkLogFile /home/test/apache/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /* load_balancer

- workers.properties

worker.list=load_balancer
worker.load_balancer.type=lb
worker.load_balancer.balance_workers=worker_node1,worker_node2
worker.load_balancer.method=Session
worker.load_balancer.sticky_session=true

##########################################
worker.worker_node1.host=IP
worker.worker_node1.port=PORT
worker.worker_node1.type=ajp13
worker.worker_node1.route=worker_node1
worker.worker_node1.lbfactor=1

worker.worker_node2.host=IP
worker.worker_node2.port=PORT
worker.worker_node2.type=ajp13
worker.worker_node2.route=worker_node2
worker.worker_node2.lbfactor=1


- worker.load_balancer.method=Session : 분산방식을 세션에 따라 분산하겠다는 의미입니다. 

    R[equest]  :  기본으로 설정되었으며  요청에 따른 분산
    S[ession]    :  연결된 세션에 따라 분산
    T[raffic]      :  발생되는 트래픽에 따라 분산
    B[usyness]  : 서버의 부하에 따른 분산시 이용한다.

- worker.load_balancer.sticky_session=true : sticky session을 사용 

2. Apache의 worker와 매칭되는 값을 WildFly의 instance-id에 설정합니다.


- standalone-ha.xml (node1)

<subsystem xmlns="urn:jboss:domain:undertow:6.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" instance-id="worker_node1">

- standalone-ha.xml (node2)
 

<subsystem xmlns="urn:jboss:domain:undertow:6.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" instance-id="worker_node2"


3. 각 노드에 application을 deploy합니다.  


- standalone-ha.xml (node1)  

    <deployments>
        <deployment name="7StickySessionA" runtime-name="7StickySession.war">
            <fs-exploded path="/home/wildfly/PocApp/7StickySessionA"/>
        </deployment>
    </deployments>

- standalone-ha.xml (node2) 
 

    <deployments>
        <deployment name="7StickySessionA" runtime-name="7StickySession.war">
            <fs-exploded path="/home/wildfly/PocApp/7StickySessionA"/>
        </deployment>
    </deployments>


- 주의할점은, 세션이 공유되어야하는 application들의 runtime-name은 동일해야한다는 것입니다.

4.Apache,WildFly를 재기동합니다.

5.호출 : node2 에서 요청을 받았습니다.


access.log

- 172.21.70.219 - - [13/Aug/2018:17:42:19 +0900] GET /session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1


6.재호출 : 이후의 요청도 모두 첫 요청을 처리했던 node2에서 처리합니다.Sticky Session이 설정되었다는 의미입니다.


access.log

- 172.21.70.219 - - [13/Aug/2018:17:42:19 +0900] GET /session.jsp HTTP/1.1 200 621 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:54 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:56 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:57 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:57 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:57 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:57 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:57 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1
- 172.21.70.219 - - [13/Aug/2018:17:42:58 +0900] GET /session.jsp HTTP/1.1 200 622 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1


7.요청을 처리하고있던 node2를 중지하겠습니다.

8.호출 : node1으로 session failover가 되어 , 요청을 처리함을 확인할 수 있습니다.


 

access.log 

- 172.21.70.219 - - [13/Aug/2018:17:52:09 +0900] GET /session.jsp HTTP/1.1 200 623 %{Referer}i %{User-Agent}i CynODUWcHo3RAh6hFyEJev1YCiekzHLvner-NQw9 default task-1



Sticky Session을 사용할 경우 처음 요청한 WAS Server의 정보를 Session에 담아 기억하여 이후 Session Routing 또는 Session Migration이 발생하지 않아 성능상 이점을 가져올 수 있습니다.

 

고맙습니다.


728x90
반응형