Tomcat server clustering with apache

톰캣 서버 설치 및 클러스터링

일단 java를 설치한다.

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer oracle-java8-set-default

만약 여러개 설치 된 경우엔

sudo update-alternatives –config java

이걸로 디폴트를 잡아주면 됨.

 

tomcat을 받아서 압축을 풀어놓고, 클러스터링 할 만큼 복사 한다.

cp tomcat9 ctest1
cp tomcat9 ctest2

2개를 복사한 후 ctest(*) 폴더안에 conf를 제외한 나머지를 삭제하고 tomcat9에 있는 폴더로 심볼릭링크를 생성한다.

ln -s ../tomcat9/bin
ln -s ../tomcat9/lib

이런식으로. 그리고 conf를 수정한다.

<?xml version=’1.0′ encoding=’utf-8′?>
<Server port=”8105″ shutdown=”SHUTDOWN”>
<Listener className=”org.apache.catalina.startup.VersionLoggerListener” />
<Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener” />
<Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener” />
<Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener” />

<GlobalNamingResources>
<Environment name=”simpleValue” type=”java.lang.Integer” value=”30″ />
<Resource name=”UserDatabase” auth=”Container”
type=”org.apache.catalina.UserDatabase”
description=”User database that can be updated and saved”
factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”
pathname=”conf/tomcat-users.xml” />
</GlobalNamingResources>

<Service name=”Catalina”>
<Connector port=”8109″ protocol=”AJP/1.3″ address=”0.0.0.0″ />
<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”tomcatA”>
<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster” />
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/>
</Realm>
<Host name=”localhost” appBase=”/home/tomcat/www/”
unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”>
<Context path=” docBase=’ROOT’ debug=’0′ reloadable=’true’ />
<Alias>domain</Alias>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log” suffix=”.txt”
pattern=”%h %l %u %t &quot;%r&quot; %s %b” />
</Host>
</Engine>
</Service>
</Server>

이런식으로 세팅을 한다.

ctest1과 2의 차이는 들여쓰기가 좆같지만 잘 보면 jvmRoute가 있다. 그 부분을 tomcatA와 tomcatB로 다르게 설정해준다.

저걸로 아파치가 두개의 톰캣을 구분한다.

그리고  server port와 connector port도 서로 다르다. 잘 알아서 수정하자.

그리고 상위 폴더로 가서 cat >> start.sh 를 해서 스크립트를 작성한다.

#!/bin/sh
./ctest1/bin/startup.sh
./ctest2/bin/startup.sh

cat >> shutdown.sh 으로 하나 더

#!/bin/sh
./ctest1/bin/shutdown.sh
./ctest2/bin/shutdown.sh

앞으로는 동시에 실행하고 중지하기 편하다.

이제 아파치를 설정할 차례다.  mod-jk를 설치해준다.

apt-get install libapache2-mod-jk

설치하고 enable 시켜준다. a2enmod jk

그리고나서 /etc/libapache2-mod-jk/workers.properties 를 수정해준다.

worker.tomcatA.port= 아까 수정한 포트번호
worker.tomcatA.host=localhost
worker.tomcatA.type=ajp13
worker.tomcatA.lbfactor=1

B도 마찬가지로 해주고.

worker.loadbalancer.balance_workers=tomcatA, tomcatB 를 넣어준다.

그리고 아파치 sites-enable에서 버추어호스트 파일을 수정한다.

JkMount /*.jsp loadbalancer 를 넣어주면

.jsp 파일들은 톰캣으로 전달하고 라운드 로빈 방식으로 A나 B로 넘어가는데

기본설정으로는 번갈아가면서 왔다갔다 하는게 아니라 한번 정해지면 세션이 바뀌기전까지는 해당 서버로만 연결된다.

혹시 틀린 부분 있으면 댓글로 알려주셈.

일단 난 이렇게 설정하고 문제 없이 쓰고 있긴 한데 워낙 오래전에 설정해놓고 글을 남기는거라

빼먹고 안쓴 부분이 있을지 모름.

댓글 남기기