인디노트

톰캣 7 세션 클러스터링 본문

개발 플랫폼 및 언어

톰캣 7 세션 클러스터링

인디개발자 2018. 11. 24. 09:46


해당 톰캣 폴더/conf/server.xml



1. jvmRoute 될 고유 ID 지정

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">

빨간색 부분은 중복되지 않은 공유의 톰캣을 구분 할 수 있는 것으로 생각하면 된다

(아무거나 해도 된다.)


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

검색 하면 주석처리가 되어 있다.


그 밑에 아래 코드를 추가한다. (주석 밖)




 

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.BackupManager"

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"/>


<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>


<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4001"  

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>


<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>


<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>


<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>


<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>


위의 코드 안에서 빨간색 부분은 유의해야 하는데, auto라고 되어 있는 부분은


모든 설정을 마쳤으나 되지 않을 경우 해당 자기 ip로 입력을 하길 바랍니다.


4001이라고 되어 있는 부분은 모든 톰캣이 다른 값을 가지고 있어야 합니다.


세션클러스터링을 하기 위한 프로젝트의 WEB-INF/web.xml에서 다음 문구를 추가합니다.


<distributable/>


위의 문구 추가 후


톰캣을  재실행 합니다.


참고사항


java.net.UnknownHostException 에러가 날 경우

vi /etc/hosts

호스트네임을 추가 하고 저장한다.


INFO: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{127, 0, 0, 1}:4002,{127, 0, 0, 1},4002, alive=690083, securePort=-1, UDP Port=-1, id={-66 -96 -51 88 16 -75 67 -100 -88 92 -3 -116 -46 -20 76 -44 }, payload={}, command={}, domain={}, ]


해당 톰캣의 로그 중 해당 로그가 출력이 된다면 성공입니다.


참고) 운영 체제에서 multicat 설정이 안되어 있을 경우 위와 같이 안될 가능성이 있는데

       해결방법은  

      shell>ifconfig -a   

         eth0      Link encap:Ethernet  HWaddr 00:1F:29:E7:ED:A4  

         inet6 addr: fe80::21f:29ff:fee7:eda4/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:36157517 errors:0 dropped:0 overruns:0 frame:0

         TX packets:18839 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:3269828443 (3.0 GiB)  TX bytes:1207502 (1.1 MiB)

         Interrupt:169 Memory:f8000000-f8012100


        3번째 줄의 UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

        같이 multicast 가 설정되어 있어야 하는데 없다를 확인 하면

        shell> ifconfig eth0 multicast라고 설정해 주면 된다.




TestFlow


1. Session Clustering

설정 후 톰캣 재시작을 하여 모두 설정이 적용 되어 있다고 가정합니다.



특정 톰캣에서 세션 값을 설정 한 후 나머지 톰캣에서 같은 세션 ID을 불러

왔을 경우 모두 ID가 동일한지 확인합니다.




출처: http://kakarus.tistory.com/27 [남창현의 노트]

반응형

'개발 플랫폼 및 언어' 카테고리의 다른 글

세션 클러스터링  (0) 2018.11.24
아파치2 톰캣7 로드밸런싱, 세션 클러스터링 설정하기  (0) 2018.11.24
httpd.service  (0) 2018.11.22
Java cacerts  (0) 2018.11.20
How to install latest Apache HTTPD on CentOS  (0) 2018.11.20
Comments