1. 셋팅 구조
2. 필요 라이브러리
- 로드밸런싱 : jk_module
3. Apache 로드 밸런싱 ( Apache -> Tomcat )
- httpd.conf 수정
#mod_jk모듈추가
LoadModule jk_module modules/mod_jk.so
#모듈설정 ( 모듈 상세 설정 )
<IfModule jk_module>
#wokers설정파일 경로
JkWorkersFile conf/workers.properties
#Log파일 경로
JKLogFile logs/mod_jk.log
#로그레벨 설정 ( Info, error, warning.. )
JKLogLevel Info
#로그 포맷 지정
JKLogStampFormat "[%a %b %d %H:%M:S %Y]"
#로그 내용 포맷 지정
JKRequestLogFormat "%w %V %T"
</IfModule>
- workers.propertis ( server1, server2 동일 설정 )
workerlist = tomcat1, tomcat2, loadbalancer
# tomcat1 ajp 포트 ( tomcat 설정에 따라 변경 가능 )
worker.tomcat1.prot=18009
# tomcat1 ip
worker.tomcat1.host=localhost
# tomcat1 ajp연동
worker.tomcat1.type=ajp13
# tomcat1 호출 비율 ( 1:1 = 라운드 로빈 )
worker.tomcat1.lbfactor=1
# tomcat2 ajp 포트
worker.tomcat2.prot=28009
# tomcat2 ip
worker.tomcat2.host=localhost
# tomcat2 ajp연동
worker.tomcat2.type=ajp13
# tomcat2 호출 비율 ( 1:1 = 라운드 로빈 )
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2
3. Tomcat 클러스터 셋팅
- tomcat1 server.xml 설정
#Tomcat 프로세스 관리 port 설정
<server port="8005" shutdown="SHUTDOWN">
...내용
#아파치와 Tomcat 연결 설정
<Connector port="18009" protocol="AJP/1.3" rediectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
#아파치 worker에서 인식하기 위한 tomcat명
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
#기존 was 설정
<Host name="localhost" appBase="webapps" .... >
<Context path="" docBase="/usr/local/tomcat/webapps/" debug="0" privileged="true" reloadable="true" autoReconnectForPool="true" />
#SimpleTcpCluster 방식은 memory, db, file에 세션 저장하는 방식이 있습니다. ( 현재 memory 방식 )
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6" >
<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6" />
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
#기본 address 228.0.0.4 ( 네트워크 D Class 대역대 선택가능 224.0.0.0 ~ 239.255.255.255 )
<Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
# ip는 localip / port는 인스턴스 별로 다른 포트로 설정 해주세요
Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.0.29" port="4000" seectorTimeout="5000" maxThreads="12" />
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter" >
.... Sender 기본설정 ex> <Transport >
</Sender>
<Interceptor>
.... Interceptor 설정
</Interceptor>
</Channel>
#기존 was 설정
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif.... />
#Deployer 기존 was 설정
<Deployer ...... />
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
</Host>
</Engine>
<Service>
</Server>
- tomcat2 server.xml 설정
#Tomcat 프로세스 관리 port 설정
<server port="8005" shutdown="SHUTDOWN">
...내용
#아파치와 Tomcat 연결 설정
<Connector port="28009" protocol="AJP/1.3" rediectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
#아파치 worker에서 인식하기 위한 tomcat명
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
#기존 was 설정
<Host name="localhost" appBase="webapps" .... >
<Context path="" docBase="/usr/local/tomcat/webapps/" debug="0" privileged="true" reloadable="true" autoReconnectForPool="true" />
#SimpleTcpCluster 방식은 memory, db, file에 세션 저장하는 방식이 있습니다. ( 현재 memory 방식 )
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6" >
<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6" />
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
#기본 address 228.0.0.4 ( 네트워크 D Class 대역대 선택가능 224.0.0.0 ~ 239.255.255.255 )
<Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
# ip는 localip / port는 인스턴스 별로 다른 포트로 설정 해주세요
Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.0.29" port="4000" seectorTimeout="5000" maxThreads="12" />
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter" >
.... Sender 기본설정 ex> <Transport >
</Sender>
<Interceptor>
.... Interceptor 설정
</Interceptor>
</Channel>
#기존 was 설정
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif.... />
#Deployer 기존 was 설정
<Deployer ...... />
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
</Host>
</Engine>
<Service>
</Server>