IT_Server/Web_Server & WAS

[windows] Apache + Tomcat 연동 및 로드 밸런싱

JJun ™ 2011. 11. 27. 15:29

-----------------------------------------------------------------------------------------------

출처: http://babtingdev.tistory.com/189

-----------------------------------------------------------------------------------------------





Apache + tomcat 은 먼저 설치가 되어 있어야 한다.

1. Connectors Download



apache.org 내에 tomcat 다운로드 페이지에 가면 Tomcat Connectors를 볼 수 있다.

들어가보면

Tomcat Connectors JK 1.2

=> Binary Releases 에 들어가서

mod_jk-1.2.26-httpd-2.2.4.so 파일을 다운받는다.



mod_jk-1.2.26-httpd-2.2.4.so => mod_jk.so로 이름을 변경 후


C:\Program Files\Apache Software Foundation\Apache2.2\modules 안에 복사해준다.
(Apache 설치디렉토리이므로 설치환경에 따라 다를수도 있다.)



2. workers.properties 생성 + 설정
Apache설치디렉토리\conf 안에 workers.properties라는 파일을 생성해준다.
(workers와 worker를 잘 구분할 것.)

workers.tomcat_home=C:\Program Files\Apache Software Foundation\Tomcat 5.5
workers.java_home=C:\Program Files\Java\jdk1.5.0_15
ps=/
worker.list=trust
worker.trust.port=8009
worker.trust.host=localhost
worker.trust.type=ajp13
worker.trust.lbfactor=1
#worker.trust.cachesize=1
worker.trust.socket_timeout=10





3. httpd.conf 수정

LoadModule jk_module modules/mod_jk.so


<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkShmFile logs/httpd/mod_jk.shm
#JkLogFile logs/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>


# jsp용.
JkMount /* trust
# jsp 용 끝

 

Apache, Tomcat 을 연동하려면 기본적으로 필요한게 Connector이다.
현재는 JK Connector만 지원을 한다고 한다.

아래는 httpd.conf 파일에서 연동에 관련된 설정이다.

LoadModule jk_module modules/mod_jk.so # 모듈 추가
JkWorkersFile "conf/workers.properties" # JK 설정 파일 위치 및 이름

JkLogFile "logs/mod_jk.log" # JK에 대한 로그 파일 위치
JkLogLevel info # 로그 레벨 지정
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # 로그 시간 포맷 지정
JkRequestLogFormat "%w %V %T" # 로그 내용 포맷
JkMount /* trust_loadballance # URL 링크 -> 모든 요청을 톰캣으로 지정
JkMount /servlet/* trust_loadballance # URL 링크 -> servlet 요청을 톰캣으로 지정


다음 workers.properties 를 설정하면 기본적인 연동은 끝나는데

이제부터 알아볼 내용은 tomcat 여러개가 구동되고 있을때 LoadBallancing 하는 방법이다.

일단 Tomcat이 2개라고 가정하고 workers.properties 파일을 설정하겠다.

worker.list=tomcat1, tomcat2, trust_loadballance

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


worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8010
worker.tomcat2.lbfactor=2


worker.trust_loadballance.type=lb
worker.trust_loadballance.balanced_workers=tomcat1,tomcat2


tomcat1, tomcat2는 각각 tomcat instance이다.
worker.....lbfactor 설정은 작업량 할당 비율이라고 보면 된다. tomcat1 : tomcat2 = 1 : 2 인 것이다.

다음은 Tomcat의 server.xml 설정이다.

<Server port="11005" shutdown="SHUTDOWN"> <!-- 톰캣 프로세스를 관리하는 포트 -->
<Service name="Catalina">
<Connector port="11080"/> <!-- 아파치를 통하지 않고 직접 접속하고자 할때의 포트 -->
<Connector port="8009" protocol="AJP/1.3"/> <!-- 아파치와 연동하기 위한 포트 -->

<!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용. 프로세스 별로 다르게 적용해야 함 -->
<Engine jvmRoute="tomcat1" name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"/>
</Engine>
</Service>
</Server>


<Server port="12005" shutdown="SHUTDOWN"> <!-- 톰캣 프로세스를 관리하는 포트 -->
<Service name="Catalina">
<Connector port="11080"/> <!-- 아파치를 통하지 않고 직접 접속하고자 할때의 포트 -->
<Connector port="8010" protocol="AJP/1.3"/> <!-- 아파치와 연동하기 위한 포트 -->

<!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용. 프로세스 별로 다르게 적용해야 함 -->
<Engine jvmRoute="tomcat2" name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"/>
</Engine>
</Service>
</Server>


이렇게 설정하게 되면 Apache 는 tomcat1, tomcat2 로 적절히 분배하여 요청하게 된다.
tomcat1이 죽었을시에는 tomcat2로만 요청을 보내주는 기능도 해주게 된다.


참고자료 : http://www.ibm.com/developerworks/kr/library/opendw/20061017/?ca=drs-kr