본문 바로가기
Server

아파치 톰캣 이중화 (로드밸런싱, 세션클러스터링)

by 전재훈 2019. 3. 25.
반응형

서버 부하 분산 등의 이유로 인해 이중화를 진행하는 경우가 있습니다.

이럴 땐 아래와 같이 하면 됩니다.


1. 아파치 httpd.conf 설정 (%APACHE_HOME%/conf/httpd.conf)


<VirtualHost *:80>

        DocumentRoot /home/web

        ServerName intro0517.co.kr


        JkMount           /*                 loadbalancer

        JkUnMount       /resources/*    loadbalancer


        <Directory />

                Options FollowSymLinks

                AllowOverride None

                Order allow,deny

                Allow from all

        </Directory>

</VirtualHost>



2. 아파치 worker.properties 설정 (%APACHE_HOME%/conf.d/workers.properties)

worker.list=loadbalancer

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1

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

worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=9010
worker.tomcat2.lbfactor=1

※ host와 ip는 설정에 맞춰 수정해 줍니다.


3. 톰캣 server.xml 설정 (%TOMCAT_HOME%/conf/server.xml)


<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>


※ AJP 포트는 workers.proeprties에서 설정한 포트와 맞춰줍니다.


<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">


※ Engins에 jvmRoute를 추가해주는데 이때는 workers.properties의 worker명과 맞춰 줍니다.


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

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

                expireSessionsOnShutdown="false"

                notifyListenersOnReplication="true"

                mapSendOptions="8"/>


        <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"/>


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

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

                </Sender>


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

                        address="127.0.0.1"

                        port="4001"

                        selectorTimeout="5000"

                        maxThreads="6"/>


                <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=""/>


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

</Cluster>


※ Receiver 내의 address는 WAS에 해당 하는 IP를 적어주고, PORT는 중복되지 않는 포트를 적어줍니다.



톰캣은 2개 모두 설정에 맞춰 작성 후에 아파치, 톰캣 모두 시작하고 테스트를 진행해보면됩니다.







반응형

댓글