Tomcat 6.0.35 Session Clustering

ITWeb/서버관리 2012. 2. 28. 11:09
Tomcat 6.0.35 Session Clustering 


[준비사항]

- Apache 2.4.1 다운로드 받기 : http://httpd.apache.org/download.cgi#apache24

- Tomcat 6.0.35 다운로드 받기 : http://mirror.khlug.org/apache/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.zip

- Tomcat Connecter 다운로드 받기 : http://ftp.daum.net/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.zip

- 다운로드 링크가 깨졌다면 해당 사이트에 직접 다운로드 받으시면 됩니다.


[설치]

- Windows 에 설치 하는 것이기 때문에 대부분 압축만 푸시고 적당한 위치에 가져다 놓으시면 됩니다.
- 편의상 D:\Application\ 아래 놓도록 하겠습니다.
- 그 이외 자세한 설치 방법은 제 블로그 이전 글 참고 하시면 됩니다. (linux 버전이지만 참고 정도는 됩니다. ^^;)
- httpd 설치 : http://jjeong.tistory.com/421
- tomcat 설치 : http://jjeong.tistory.com/435
- tomcat connector 설치 : http://jjeong.tistory.com/433
- httpd+tomcat+jdk 연동 : http://jjeong.tistory.com/230

 
[설정]

- httpd 설정하기
httpd 가 설치된 경로에서 conf 폴더에 있는 httpd.conf 파일을 에디터창에서 수정.

# 이 설정에 주석을 제거해 줍니다.
# 이유는 httpd 의 proxy balancer 기능을 이용하기 위해서 입니다.
# tomcat 의 경우 기본 worker 설정에서 type 을 lb 로 지정해 주면 httpd 관계 없이 loadbalancer 기능을 이용 할 수 있습니다. 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

# 이 설정에 주석을 제거해 줍니다.
Include conf/extra/httpd-vhosts.conf

# 아래 파일을 include 해 줍니다.
Include D:/Application/httpd/conf/session-cluster/tomcat.conf

 
[httpd-vhost.conf 설정하기]

<VirtualHost dev.session-cluster.com:80>
    ServerAdmin jjeong@tistory.com
    DocumentRoot "D:\Application\httpd\htdocs\session_cluster\web"
    ServerName dev.session-cluster.com
    ServerAlias dev.session-cluster.com
    ErrorLog "D:\Application\httpd\logs\dev.session-cluster.com-error.log"
    CustomLog "D:\Application\httpd\logs\dev.session-cluster.com-access.log" common
jkMount /* loadBalancer
DirectoryIndex index.html index.jsp

<Directory "D:\Application\httpd\htdocs\session_cluster\web">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from All
</Directory>
</VirtualHost>

 
[tomcat.conf 설정하기]

LoadModule jk_module modules/mod_jk.so

JkWorkersFile            D:/Application/httpd/conf/session-cluster/workers.properties
JkShmFile               D:/Application/httpd/logs/mod_jk.shm
JkLogFile                D:/Application/httpd/logs/mod_jk.log
JkLogLevel               debug
JkLogStampFormat      "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat   "%w %V %T"

 
[workers.properties 설정하기]

ps=/
worker.list=tomcat1, tomcat2, loadBalancer

worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

worker.tomcat2.port=8109
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

worker.loadBalancer.type=lb
worker.loadBalancer.balanced_workers=tomcat1,tomcat2
worker.loadBalancer.sticky_session=1

 
[Tomcat1 server.xml 설정하기]

- 파일을 열어 보시면 <Cluster /> 섹션이 있습니다.
- 주석 처리 되어 있는 부분을 해제 합니다.
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
- <Engine /> 섹션에 jvmRoute 코드 추가 합니다.
<Engine defaultHost="localhost" jvmRoute="tomcat1" name="Catalina">

이전 버전과 다른 점은 
previous : org.apache.catalina.cluster.tcp.SimpleTcpCluster
current : org.apache.catalina.ha.tcp.SimpleTcpCluster
해당 패키지의 경로 입니다.

 
[Tomcat2 server.xml 설정하기]

- Tomcat1 설정과 동일하게 주석을 제거 합니다.
- <Engine /> 섹션에 jvmRoute 코드 추가 합니다.
<Engine defaultHost="localhost" jvmRoute="tomcat2" name="Catalina">

 
[Tomcat1, Tomcat2 서버의 web.xml 설정하기]

- 설정 파일 제일 하단에 아래 코드 추가 합니다.
<distributable />

 
[Tomcat 설정 시 주의사항]

- 위 설정들은 PC 한 대에서 설정하는 내용으로 기술을 하였습니다.
- 각 port 충돌이 발생 하지 않도록 주의 하시기 바랍니다.

 
[Tomcat1 서버의 index.jsp]

<%
  session.setAttribute("a","a");
%>
<html>
<head>
<title>Test JSP</title>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr bgcolor="#CCCCCC">
    <td width="13%">Tomcat1 Machine</td>
    <td width="87%">&nbsp;</td>
  </tr>
  <tr>
    <td>Session ID :</td>
    <td><%=session.getId()%></td>
  </tr>
</table>
</body>
</html>


 
 
[Tomcat2 서버의 index.jsp]

<%
  session.setAttribute("a","a");
%>
<html>
<head>
<title>Test JSP</title>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr bgcolor="#CCCCCC">
    <td width="13%">Tomcat2 Machine</td>
    <td width="87%">&nbsp;</td>
  </tr>
  <tr>
    <td>Session ID :</td>
    <td><%=session.getId()%></td>
  </tr>
</table>
</body>
</html>




Eclipse 에서 Tomcat1, 2 를 번갈아 가면서 start, stop 해 보시면 lb 동작 하는걸 확인 하실 수 있습니다.
그리고 session 유지 되는 것도 확인 가능 합니다.
 
[Eclipse 에서 Tomcat 서버 등록 및 실행하기]

- Server 창에서 New -> Server -> Apache -> Tomcat v6.0 Server 선택
- Server name 에 Tomcat Session Cluster 1 이라고 작성
- Next 버튼 클릭 또는 Server runtime environment 에서 Add 클릭
- Browse 버튼 클릭 후 설치된 Tomcat1 서버의 경로를 지정 합니다.
- 이런 방식으로 Tomcat2 서버도 등록을 합니다.


 

[참고사이트]
http://www.easywayserver.com/implementation-tomcat-clustering.htm
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html


※ 위 내용은 성능 튜닝을 고려하지 않은 내용입니다.
실제 서비스에 적용하시기 전에 충분한 튜닝 과정을 거치시기 바랍니다.

※ 서버 한대를 기준으로 설정한 내용입니다.
서버 여러대를 묶기 위해서는 <Cluster /> 섹션에 추가 설정을 해줘야 합니다.
이 부분은 추후 작성 업데이트 하겠습니다.  

 
: