공책

아파치2 톰캣7 로드밸런싱, 세션 클러스터링 설정하기 본문

OS/Ubuntu

아파치2 톰캣7 로드밸런싱, 세션 클러스터링 설정하기

QTHoney 2014. 10. 14. 14:11
======= 환경 =======
ubuntu 12.04 lts
Apache/2.2.22
tomcat7.0.56

======= 설치 =======

아파치2 설치
apt-get install apache2

톰캣7 설치
원하는 설치 경로로 이동
 wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz
tar xvf apache-tomcat-7.0.56.tar.gz

======= 설정 =======
아파치 설정
a2enmod proxy_balancer proxy_http
a2enmod proxy proxy_balancer proxy_http status lbmethod_*
 vi /etc/apache2/sites-available/default

빨간 내용 추가
http://127.0.0.1 부분에는 본인 아이피 써주시면 됩니다.
<VirtualHost *:80>
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080 loadfactor=1
BalancerMember http://127.0.0.1:8081 loadfactor=1
BalancerMember http://127.0.0.1:8082 loadfactor=1
BalancerMember http://127.0.0.1:8083 loadfactor=1
</Proxy>

ProxyPass / balancer://mycluster

...
</VirtualHost>

아파치 재시작
service apache2 restart

이렇게 설정해주면 톰캣만 여러개 떠있다면 아파치로 로드밸런싱이 된다.
아직 톰캣 설정을 안했기때문에 톰캣이 여러개 뜨진 않을것이다.


톰캣 세션 클러스터링


각 톰캣에 세션이 공유되도록 클러스터링 설정을 해줌과 동시에

톰캣이 여러개 실행될 수 있도록 포트를 다르게 해준다.



상단에 설치한 경로로 이동

 vi apache-tomcat-7.0.56/conf/server.xml


세션 클러스터링을 위한 설정을 Cluster 주석 처리된 부분에 해당 내용 추가

하단 Receiver 부분의 포트는 각 톰캣마다 다르게 준다.

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                 channelSendOptions="8">


          <Manager className="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>


          <Channel className="org.apache.catalina.tribes.group.GroupChannel">

            <Membership className="org.apache.catalina.tribes.membership.McastService"

                        address="228.0.0.4"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                      address="auto"

                      port="4000(각 톰캣마다 다르게설정)"

                      autoBind="100"

                      selectorTimeout="5000"

                      maxThreads="6"/>


            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>


          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>


          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

                    tempDir="/tmp/war-temp/"

                    deployDir="/tmp/war-deploy/"

                    watchDir="/tmp/war-listen/"

                    watchEnabled="false"/>


          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">

        </Cluster>


각 어플리케이션의 web.xml 수정
vi apache-tomcat-7.0.56/webapps/ROOT/WEB-INF/web.xml

태그 추가
<distributable/>


톰캣7 4대 복사
cp -a apache-tomcat-7.0.56 tomcat7-1
cp -a apache-tomcat-7.0.56 tomcat7-2
cp -a apache-tomcat-7.0.56 tomcat7-3
cp -a apache-tomcat-7.0.56 tomcat7-4


각 톰캣에 포트가 설정되어있는데 4개를 동시에 띄우려면 포트가 충돌나면 안된다.


vi tomcat7-1/conf/server.xml

내용중에 아래 세곳의 포트번호를 각 톰캣마다 다르게 해준다.


Server port="8005"

Connector port="8080" protocol="HTTP/1.1"

Connector port="8009" protocol="AJP/1.3"


Server port="8006"

Connector port="8081" protocol="HTTP/1.1"

Connector port="8010" protocol="AJP/1.3"

...


설정 완료


성공되었는지 확인


톰캣 실행

./tomcat7-1/bin/startup.sh
./tomcat7-2/bin/startup.sh
./tomcat7-3/bin/startup.sh
./tomcat7-4/bin/startup.sh


각 톰캣에 index.jsp에 세션정보를 출력해본다.

tomcat1 = <%=session.getId()%>
tomcat2 = <%=session.getId()%>
tomcat3 = <%=session.getId()%>
tomcat4 = <%=session.getId()%>


웹 브라우저에서 확인

http://localhost

새로고침 하면서 각 톰캣마다 값이 동일한지 확인한다.


Comments