Apache2, Tomcat 연동 및 로드밸런싱 설정

예전에는 jsp 등과 같은 서블릿를 이용한 웹 서비스를 할때 보통 was 앞단에 httpd 서버를 두고 서비스를 했다.

물론 어디까지내 내 생각이긴 하지만 오래전 우리나라에서는 apache + tomcat, webtoB + jeus 조합이 가장 널이 사용되는 조합이었다.

지금은 톰캣의 성능이 많이 좋아져서, 사실 apache 등과 같은 httpd 를 두지 않아도 된다.

예를들어 xml, json 과 같은 동적 문서만을 서비스하는 경우 굳이 httpd를 사용할 필요는 없다.
httpd를 연동 할것인가 아닌가는 서비스의 목적, 시스템 구성에 따라 고려해야 하는게 맞다.

개인적인 소견으로는 맹신적인 httpd + 서블릿 컨테이너의 조합은 옳지 않다.

그럼에도 불구하고 내가 apache와 tomcat을 실제 서비스에서 연동하여 사용하는 이유는 크게 다음과 같다.

1. 80 포트의 사용권한
– 리눅스에서 ~1024 포트까지는 root 계정만 사용이 가능하므로, tomcat을 80 포트로 운영하기에는 문제가 있다. 2. 정적 데이터 처리
– 톰캣의 성능이 아무리 좋아졌다고 해도, image/css 등과 같은 정적 데이터는 httpd에서 처리하는게 더 믿음직 하다.
또한 압축등과 같은 정적 데이터를 처리하는 다양한 옵션등이 존재한다.(물론 압축 전송 옵션은 톰캣7에도 있다) 3. 로드 밸런싱
– 동일 서버내에서 한 서비스를 여러 tomcat에서 서비스하고자 할때 사용한다. apache를 연동하는 가장 큰 목적이다.

자. 그러면 apache + tomcat 연동을 하나씩 해보자.

아래 설정방법은 apache2.2 와 tomcat7을 이용한 설정방법이다.
tomcat의 버전은 6 이상이면 큰 상관은 없지만, apache의 경우 2.4 는 조금 다를 수 있다.

아파치 톰캣 기본연동

1. 톰캣 커넥터 설치

[root@tourWeb1 ~]# cd /usr/local/src
[root@tourWeb1 ~]# wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
[root@tourWeb1 ~]# tar zxvf tomcat-connectors-1.2.40-src.tar.gz
[root@tourWeb1 ~]# cd tomcat-connectors-1.2.40-src/native
[root@tourWeb1 ~]# ./configure –with-apxs=/usr/local/apache2/bin/apxs
[root@tourWeb1 ~]# make
[root@tourWeb1 ~]# make install

apxs의 경로는 본인의 apache가 설치되어 있는곳으로 지정하면 된다.

커넥터는 apache 사이트에 가면 최신버전을 다운받을 수 있다 : http://tomcat.apache.org/connectors-doc/

2. 모듈 설치확인

[root@tourWeb1 ~]# cd /usr/local/apache2/module
[root@tourWeb1 ~]# ll | grep mod_jk.so
-rwxr-xr-x 1 root root 905398  7월  1 13:56 mod_jk.so
[root@tourWeb1 ~]#

3. httpd.conf에 mod_jk 추가

[root@tourWeb1 ~]# cd /usr/local/apache2/conf
[root@tourWeb1 ~]# vi httpd.confhttpd.conf 제일 하단에 아래 내용 추가LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkLogFile             logs/mod_jk.log
JkLogLevel    info
</IfModule>

4. workers.properties 작성

[root@tourWeb1 ~]# cd /usr/local/apache2/conf
[root@tourWeb1 ~]# vi workers.propertiesworker.list=worker1, worker2
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1worker.worker2.port=18009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

* 연동시키는 톰캣 서비스 추가시 worker.list에 worker 이름을 추가하고 밑으로 계속 작성하면 된다.

5. virtualhost 설정

[root@tourWeb1 ~]# cd /usr/local/apache2/conf
[root@tourWeb1 ~]# vi httpd.confNameVirtualHost *:80# http://www.test.com 으로 들어오는 URL 처리<VirtualHost *:80>
ServerAdmin webmaster@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /home/tour/test/doc/WebContent            # 정적 데이터 처리를 위한 서비스 경로
<Directory “/home/tour/test/doc/WebContent”>
Options -Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.jsp<LocationMatch “/WEB-INF”>
deny from all
</LocationMatch>

<LocationMatch “/META-INF”>
deny from all
</LocationMatch>

TransferLog “|/usr/local/apache2/bin/rotatelogs /usr/local/apache/logs/test.com-Transfer_log_%y%m 86400”
ErrorLog /usr/local/apache/logs/test.com-error_log

JkMount /*.jsp  worker1        # 확장자가 jsp 인 호출을 worker가 처리하게 함.

</VirtualHost>

# http://m.test.com 으로 들어오는 URL 처리

<VirtualHost *:80>
ServerAdmin webmaster@test.com
ServerName m.test.com
ServerAlias m.test.com
DocumentRoot /home/tour/test/m/doc/WebContent            # 정적 데이터 처리를 위한 서비스 경로
<Directory “/home/tour/test/m/doc/WebContent”>
Options -Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.jsp

<LocationMatch “/WEB-INF”>
deny from all
</LocationMatch>

<LocationMatch “/META-INF”>
deny from all
</LocationMatch>

TransferLog “|/usr/local/apache2/bin/rotatelogs /usr/local/apache/logs/m.test.com-Transfer_log_%y%m 86400”
ErrorLog /usr/local/apache/logs/m.test.com-error_log

JkMount /*.jsp  worker2        # 확장자가 jsp 인 호출을 worker가 처리하게 함.

</VirtualHost>

5. apache 재시작(stop, start)

아파치 톰캣 로드밸런싱 설정

1개의 도메인에 대하여 톰캣 2개로 서비스하는 방법이다. 각각의 톰캣은 포트만 달리하고 동일한 설정을 유지하는게 좋다.

1. workers.properties 수정

[root@tourWeb1 ~]# cd /usr/local/apache2/conf
[root@tourWeb1 ~]# vi workers.propertiesworker.list=worker1, worker2, worker3, load_balance
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1worker.worker2.port=18009
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1worker.worker3.port=28009
worker.worker3.host=localhost
worker.worker3.type=ajp13
worker.worker3.lbfactor=1worker.load_balance.type=lb
worker.load_balance.balanced_workers= worker1, worker3

* load_balance는 worker1과 worker3을 이용한다.
* lbfactor는 로드밸런싱 비율이다. 1:1, 1:5 등과 같이 로드밸런싱 비율을 지정할 수 있다.

2. virtualhost 수정

<VirtualHost *:80>
ServerAdmin webmaster@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /home/tour/test/doc/WebContent            # 정적 데이터 처리를 위한 서비스 경로
<Directory “/home/tour/test/doc/WebContent”>
Options -Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.jsp<LocationMatch “/WEB-INF”>
deny from all
</LocationMatch><LocationMatch “/META-INF”>
deny from all
</LocationMatch>TransferLog “|/usr/local/apache2/bin/rotatelogs /usr/local/apache/logs/test.com-Transfer_log_%y%m 86400”
ErrorLog /usr/local/apache/logs/test.com-error_logJkMount /*.jsp  load_balance

</VirtualHost>

3. tomcat conf/server.xml jvmRoute 추가

– tomcat_1

<Connector port=”8009″ protocol=”AJP/1.3″/> <!– 아파치와 연동하기 위한 포트 –><!– jvmRoute 지정–>
<Engine jvmRoute=”worker1″ name=”Catalina” defaultHost=”localhost”>
<Host name=”localhost” appBase=”webapps”/>
</Engine>

– tomcat_2

<Connector port=”28009″ protocol=”AJP/1.3″/> <!– 아파치와 연동하기 위한 포트 –><!– jvmRoute 지정–>
<Engine jvmRoute=”worker2″ name=”Catalina” defaultHost=”localhost”>
<Host name=”localhost” appBase=”webapps”/>
</Engine>

* jvmRoute는 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용된다. 그렇기때문에 톰캣 프로세스별로 서로 다른 이름을 가져야 한다.

4. 서비스 확인
톰캣 및 아파치 재시작후 정상적으로 뜨는지 확인한다.
정상으로 확인이되면 한쪽 톰캣을 정지시킨후 로드밸런싱이 되는지 확인한다.

http://fruitdev.tistory.com/25 에서 가져옴

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Videos, Slideshows and Podcasts by Cincopa Wordpress Plugin