개발자 커뮤니티



Document Download

Company Profile KOR



전체글보기

Apache-Tomcat 로드밸런싱 및 세션 클러스터링 설정하기

작성자 : 관리자

10-07-26 14:25 | 조회수:106118 |

첨부파일 cluster_config.txt
cluster.xml
TomcatSessionClustering.zip

최근 Apache Web Server와 Tomcat Application 서버의 성능이 많이 향상되어 상용 사이트에서도 Apache와 Tomcat을 이용하여 서비스하는 경우가 늘어나고 있는 것으로 보입니다. 이에, 이번 시간에는 Apache와 Tomcat을 이용하여 Load-Balancing과 Session-Clustering을 지원하도록 설정해 보도록 하겠습니다.

 

 각 서버 어플리케이션의 버전은 다음과 같습니다.

 

  • Apache HTTP Server : 2.0.49
  • Tomcat Application Server :  6.0.16

Tomcat은 Version 5.0 부터 세션클러스터링을 지원해왔습니다. 만약 다른 버전의 Tomcat에 대해 Session Clustering을 수행하시려 한다면 tomcat.apache.org 에서 해당 버전의 Documentation을 확인하시기 바랍니다.

 

1. 설치 환경


서버의 설치 환경은 다음과 같다고 가정합니다.

  1. Apache 서버는 192.168.0.1에 설치되어 있으며 80 포트로 서비스한다. 편의상 WEB이라 부른다.
  2. TomcatA는 192.168.0.2에 설치되어 있다. 편의상 WAS1이라 부른다.
  3. TomcatB는 192.168.0.3에 설치되어 있다. 편의상 WAS2라 부른다.
  4. WEB, WAS1, WAS2 서버는 모두 Multicast가 지원되는 동일 네트워크 환경 내에 존재한다.

이 때, (4) Multicast의 지원 여부가 매우 중요합니다. Tomcat은 기본적으로 클러스터 멤버 간에 Multicast를 이용하여 정보를 주고 받기 때문에 만약 Multicast가 지원되지 않는 라우터나 스위치를 사용해야 한다면 아래 방법으로는 클러스터링 환경을 구성할 수 없습니다.

 

2. Apache Web server 설정


Apache Web Server에 대해 설정해야 하는 내용은 크게 두 가지입니다. 하나는 mod_jk 설정이고 다른 하나는 worker 설정입니다.

먼저 mod_jk 설정입니다. mod_jk 설정은  Apache와 Tomcat의 연동을 위해 AJP Connector Module을 Apache에 Load하는 것입니다. 다음 절차를 따라 설정하십시오.

1. AJP Connector(mod_jk) 다운로드

AJP Connector는 http://tomcat.apache.org/download-connectors.cgi 에서 Binary Release를 클릭하여 사용하는 OS와 Apache HTTP Server의 버전에 맞는 모듈을 다운로드 받아야 합니다. 이곳에서는 mod_jk-1.2.30-httpd-2.0.53.so를 다운로드받아 사용하였습니다.

2. 파일 복사

다운로드한 mod_jk-1.2.30-httpd-2.0.53.so 파일을 $APACHE_HOME/modules 디렉토리에 복사한 뒤, 파일명을 mod_jk.so로 변경합니다.

3. mod_jk 설정

$APACHE_HOME/conf/httpd.conf 파일을 열어 아래 코드를 입력합니다. 코드의 위치는 170라인쯤 LoadModule 코드가 있는 곳 이후에 입력합니다.

# mod_jk 파일은 $APACHE_HOME/modules/mod_jk.so이다.
LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers.properties
JkLogFile logs/jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# /cluster/* 라는 URI가 입력되면 loadbalancer라는 worker로 request를 전달한다.
JkMount /cluster/* loadbalancer

 

다음으로 worker를 설정합니다. worker는 AJP Connector를 통해 서비스하는 Application Server를 등록하는 것입니다. 위에서 JkWorkersFile conf/workers.properties 라 설정하였으므로 worker를 등록하는 파일은 $APACHE_HOME/conf/workers.properties 파일이 됩니다. workers.properties 파일을 생성한 뒤 다음 코드를 입력합니다.

worker.list=loadbalancer

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=WAS1,WAS2
worker.loadbalancer.sticky_session=1

worker.WAS1.type=ajp13
worker.WAS1.host=192.168.0.2
worker.WAS1.port=8009
worker.WAS1.lbfactor=1

worker.WAS2.type=ajp13
worker.WAS2.host=192.168.0.3
worker.WAS2.port=8009
worker.WAS2.lbfactor=1

이상입니다. 이로써 Apache HTTP Server에 대한 설정은 완료되었습니다.

 

3. Tomcat Application Server 설정

Tomcat Application Server에 대한 설정은 모두 $CATALINA_HOME/conf/server.xml에서 이뤄집니다. server.xml에서 이루어지는 설정 내용은 AJP Connector 설정과  Session Clustering 설정입니다. 설정 방법은 각각 다음과 같습니다.

 

1. AJP Connector 설정(was1, was2 공통)

AJP Connector 설정은 server.xml 내에 기본적으로 포함되어 있습니다. server.xml 파일 내에서 AJP/1.3 으로 검색하시면 다음과 같은 코드를 확인할 수 있습니다.

8009" protocol="AJP/1.3" redirectPort="8443">

 

이 코드는 Apache의 workers.properties에서 설정했던 AJP Port와 일치하도록 하기만 하면 됩니다. 즉, WAS1, WAS2 모두 8009 포트를 이용하여 통신하게 되어 있으므로 AJP 포트를 8009로 설정하면 됩니다. 만약 WAS1과 WAS2가 동일한 장비에 설치되어 있다면 server.xml에서 사용되는 모든 port가 중복되지 않도록 설정하여야 합니다. (단, Session Clustering을 설정할 때 사용하는 Multicast port는 같은 port를 사용해야 합니다.)

 

2. Session Clustering 환경 설정

이제 Session Clustering을 수행하도록 세팅합니다. 지금까지의 모든 내용은 Tomcat과 Apache의 버전에 상관없이 동일하지만, 이 Session Clustering은 Tomcat의 버전에따라 설정 방법이 다릅니다. 각 버전에 따른 설정 방법은 http://tomcat.apache.org에서 확인하시기 바랍니다.

역시 $CATALINA_HOME/conf/server.xml 파일의 내용 중, Cluster라는 단어를 검색하여  주석으로 되어 있는 Cluster 엘리먼트에서 주석을 제거하고 첨부된 txt 파일 내용을 붙여넣기합니다.

 

Cluster 환경 설정. 내용에서 볼 수 있듯이 Multicast를 이용하고 있다.

 

위의 내용 중 Engine 엘리먼트의 jvmRoute 어트리뷰트는 workers.properties에서 입력한 worker의 이름을 입력하서야 합니다. 즉, workers.properties에서 설정한 대로, WAS1의 경우 "WAS1"로 WAS2의 경우 "WAS2"로 설정하십시오.

Session Clustering의 상세한 내용은 http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 에서 확인하시기 바랍니다. 만약 WAS1과 WAS2가 동일한 장비에서 실행이 될 경우라면, 위 설정 내용 중 Receiver의 port만 구별할 수 있도록 설정하면 됩니다. (Multicast address와 port는 변경할 필요가 없습니다.)

 

4. Web Application에 Clustering이 가능하도록 설정

 

마지막으로 Web Application의 web.xml에 해당 Application이 클러스터링을 지원할 수 있도록 distributable Element를 입력해야 합니다. 첨부된 Eclipse Project의 WebContent/WEB-INF/web.xml 파일을 확인하시기 바랍니다.

Application의 web.xml 파일. distributable Element를 선언하였다.

 

5. Clustering Test

다음 절차를 따라 실제 Clustering이 되는지 확인합니다.

1. 첨부된 TomcatSessionClustering.zip  파일을 다운로드받아 적절한 위치에 압축을 해제합니다.
   (예: C:/workspace)

2. 첨부된 cluster.xml 파일을 다운로드 받은 뒤, WAS1과 WAS2 모두의 $CATALINA_HOME/conf/Catalina/localhost 디렉토리에 복사해 넣은 뒤, $WORKSPACE_HOME 변수를 실제 디렉토리로 변경해 줍니다.

   (예: c:/workspace/TomcatSessionClustering/WebContent)

3. Apache HTTP Server, WAS1, WAS2를 모두 재기동합니다.

4. http://192.168.0.1/clustering/index.jsp 파일을 호출합니다.

5. 화면과 WAS1, WAS2 로그를 확인하면서 Load-Balancing과 Session Clustering이 되는 것을 확인합니다.

 

Session-Clustering에 대해 참고하셔야 할 점은, HTTP Session에 저장되는 모든 Instance는 java.io.Serializable을 implements해야 한다는 점입니다. 이는 네트워크를 통해 해당 instance가 전달되어야 하기 때문이며, 만약 Serializable을 implements하지 않은 Class의 instance를 Session에 적재한다면 Clustering되지 않음을 기억하시기 바랍니다.

 

이상과 같이 Apache를 이용한 Load-Balancing과 Tomcat Session-Clustering 설정 방법에 대해 다루어 보았습니다. 참고가 되셨길 바랍니다.

태그 Apache로드밸런싱, Tomcat 세션클러스터링, Apache Load Balancing, Tomcat Session Clustering

목록으로

댓글작성 [0]
: 이름
: 비밀번호
: 홈페이지 댓글등록

0 자 / 100 자

윗글 [Eclipse Plugin 개발] No Schema for the 'XXX' extension poin..
아래글 쓸만한 Tomcat용 Admin/Manager/Monitoring Application을 소개..
  • 글쓰기
  • 답글
  • 목록