인디노트

세션 클러스터링 본문

개발 플랫폼 및 언어

세션 클러스터링

인디개발자 2018. 11. 24. 10:06

Apache 와 두개의 Tomcat 을 JK2 를 이용하여 연동한 로드밸런싱 환경에서는 각 Tomcat 끼리 세션공유가 안되는 단점이 있다.
그래서 Tomcat5.x 부터 지원해오던 클러스터링 세팅으로 두 Tomcat 간의 세션공유를 해본다. 

세팅


1. 각각의 Tomcat 의 server.xml 을 수정한다.

기본적으로 <cluster> 태그는 주석처리 되어있을 것이다. 주석을 해제한다.

  1. 01....
  2. 02. <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
  3. 03. managerClassName="org.apache.catalina.cluster.session.DeltaManager"
  4. 04. expireSessionsOnShutdown="false"
  5. 05. useDirtyFlag="true">
  6. 06.
  7. 07. <Membership
  8. 08. className="org.apache.catalina.cluster.mcast.McastService"
  9. 09. mcastAddr="228.0.0.105"
  10. 10. mcastPort="45564"
  11. 11. mcastFrequency="500"
  12. 12. mcastDropTime="3000"/>
  13. 13.
  14. 14. <Receiver
  15. 15. className="org.apache.catalina.cluster.tcp.ReplicationListener"
  16. 16. tcpListenAddress="auto"
  17. 17. tcpListenPort="4001"
  18. 18. tcpSelectorTimeout="100"
  19. 19. tcpThreadCount="6"/>
  20. 20.
  21. 21. <Sender
  22. 22. className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
  23. 23. replicationMode="pooled"/>
  24. 24.
  25. 25. <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
  26. 26. filter=".*.gif;.*.js;.*.jpg;.*.htm;.*.html;.*.txt;"/>
  27. 27. </Cluster>
  28. 28....



위의 화면은 tomcat1의 server.xml 이다.
<Cluster> 태그 사이에는 <Membership>, <Receiver>, <Sender>라는 3개의 태그가 위치하는<Membership>은 멤버 그룹을 정의 하는 것으로 해당 값이 동일한 모든 톰캣 프로세스는 클러스터로묶이게 된다. <Receiver>는 클러스터 그룹에서 보내오는 메시지와 세션 정보 등을 받아오는 것이며<Sender>는 자신의 세션 정보 및 메시지를 전송하는 것이다.위의 내용을 tomcat2의 server.xml에 Receiver 태그의 tcpListenPort 값을 4002로 변경해서 적용하도록 하자.


2. web.xml 수정

바라보고 있는 웹어플리케이션의 web.xml 에 <distributable /> 태그를 추가한다.
<web-app> 안에 위치하면 된다.


3. 테스트 한다.


-끝-

반응형
Comments