환경 설정
Tomcat 7
Apache 2.4.29
OS windows 7 Win64
리케이션을 여러대의 Tomcat으로 구동하는 방식입니다.
Apache 설치
https://www.apachelounge.com/download/
Apache 2.4.29 Win64 용 httpd를 다운받습니다.
이때 mod_jk 파일 mod_jk-1.2.42-win64-VC15.zip도 같이 받으셔야 합니다.

Apache 버전과 Mod_jk 버전이 일치하지 않은경우
Apache 설치후 구동이 되지 않을수 있습니다.
꼭 호환이 되는 Apache ,Mod_jk 파일을 다운 받으셔야 합니다.

원하는 경로에 Apache 압축을 풀어줍니다.

mod_jk 역시 압축을 풀어줍니다.

mod_jk.so 파일을
Apache24\moudle 경로에
복사 / 붙여넣기합니다.

시스템 속성 -> 환경변수 설정
Apache 폴더가 존재하는 경로를 입력해줍니다.
C:\Apache24\bin

환경설정 이후
CMD Dos모드로 들어가
Apache 설치 : httpd -k install
Apache 버전확인 : httpd -v
명령어를 통해 확인합니다.
Apache 설정모드

Apache24\conf 경로 이동후
httpd.conf 파일을 편집합니다.
Editplus 또는 메모장 활용

ServerRoot 수정
Apache 설치경로

ServerName 수정

window -> 서비스 -> Apache24 구동 후 확인
구동이 도지 않으면 Apache24 및 mod_jk를 확인해야 합니다.
Tomcat 로드 밸런싱 설정
저는 Tomcat을 2개 사용할것 입니다.
설치 된 Tomcat 경로로 이동합니다.

Tomcat 설치 경로 이동 후
was1 / was2 라는 빈 폴더를 생성합니다.

Conf / logs / webapps / work 폴더를 복사합니다.
was1 / was2 를 따로 따로 구동하기 위해 필요한 폴더입니다.
기존에 있던 폴더를 복사 하시면 됩니다.

저는 그냥 모든 폴더/파일을 복사 붙여넣기 하였습니다.
물론 Server쪽 환경 설정할때는
Conf / logs / webapps / work 폴더만 붙여넣기 하였습니다.

was1\conf\
Server.xml파일을 편집합니다.

<?xml version=’1.0′ encoding=’utf-8′?>
<Server port=”8005″ shutdown=”SHUTDOWN”>
<Listener className=”org.apache.catalina.startup.VersionLoggerListener” />
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />
<Listener className=”org.apache.catalina.core.JasperListener” />
<Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener” />
<Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener” />
<Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener” />
<GlobalNamingResources>
<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=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″/>
<Connector port=”7591″ maxHttpHeaderSize=”8192″ maxKeepAliveRequests=”-1″ maxThreads=”1000″ minSpareThreads=”500″ maxSpareThreads=”500″ enableLoopups=”false” redirectPort=”8443″ acceptCount=”500″
compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla.graviata” compressableMimeType=”text/html,text/xml,text/plain,text/javascript,text/css”
connectionTimeout=”600000″ disabledUploadTimeout=”true” Server=”” protocol=”AJP/1.3″ />
<Engine jvmRoute=”tomcat1″ name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>
</Realm>
<Host name=”localhost” appBase=”C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps” unpackWARs=”true” autoDeploy=”true”>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs” prefix=”was1″ suffix=”.txt” pattern=”%h %l %u %t "%r" %s %b” />
<Context crossContext=”true” path=”” docBase=”/KorailBim” reloadable=”true”></Context>
</Host>
<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.MessageDispatchInterceptor” />
</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.ClusterSessionListener” />
</Cluster>
</Engine>
</Service>
</Server>
—————————————————————————–

웹 어플리케이션이 구동될 Webapps\ROOT으로 이동합니다.
이 경로는 Tomcat -> Server.xml -> appBase 에 설정된 경로의 Root을 사용하면 됩니다.

Web.xml 편집모드로 들어가
<distributable/>
추가해줍니다.
Was2\conf
Server.xml
역시 위와 동일하게 처리해줍니다.
<?xml version=’1.0′ encoding=’utf-8′?>
<Server port=”8006″ shutdown=”SHUTDOWN”>
<Listener className=”org.apache.catalina.startup.VersionLoggerListener” />
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />
<Listener className=”org.apache.catalina.core.JasperListener” />
<Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener” />
<Listener className=”org.apache.catalina.mbeans.GlobalResourcesLifecycleListener” />
<Listener className=”org.apache.catalina.core.ThreadLocalLeakPreventionListener” />
<GlobalNamingResources>
<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=”8081″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443″/>
<Connector port=”8090″ maxHttpHeaderSize=”8192″ maxKeepAliveRequests=”-1″ maxThreads=”1000″ minSpareThreads=”500″ maxSpareThreads=”500″ enableLoopups=”false” redirectPort=”8443″ acceptCount=”500″
compression=”on” compressionMinSize=”2048″ noCompressionUserAgents=”gozilla.graviata” compressableMimeType=”text/html,text/xml,text/plain,text/javascript,text/css”
connectionTimeout=”600000″ disabledUploadTimeout=”true” Server=”” protocol=”AJP/1.3″ />
<Engine jvmRoute=”tomcat2″ name=”Catalina” defaultHost=”localhost”>
<Realm className=”org.apache.catalina.realm.LockOutRealm”>
<Realm className=”org.apache.catalina.realm.UserDatabaseRealm” resourceName=”UserDatabase”/>
</Realm>
<Host name=”localhost” appBase=”C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps” unpackWARs=”true” autoDeploy=”true”>
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”was2″ suffix=”.txt”
pattern=”%h %l %u %t "%r" %s %b” />
<Context crossContext=”true” path=”” docBase=”/KorailBim” reloadable=”true”></Context>
</Host>
<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.MessageDispatchInterceptor” />
</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.ClusterSessionListener” />
</Cluster>
</Engine>
</Service>
</Server>
———————————————-
Server Port / Connector Port / Cluster Port는
was1\Server.xml Port와 중복되지 않게 설정합니다.
appBase는 웹 어플리케이션의 위치이기 때문에
Was1/Was2로 따로 설정해도 무방하지만
배포 처리를 각각해줘야 하기 때문에
저는 메인 Tomcat 위치로 설정했습니다.

다시 Apache24\httpd.conf 파일을 편집하여
Directory경로를 수정해 줍니다.
Apache가 처리할 소스 경로로 Tomcat의 웹 어플리케이션이 존재하는 최상위 폴더를 지정했습니다.
DocumentRoot “C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps”
<Directory “C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\webapps”>
Require all granted <- 추가
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Apache24 와 Tomcat의 로드 밸런싱을 위한 설정을 해줘야합니다.
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] ”
JkRequestLogFormat “%w %V %T”
JkMount / loadbalancer
JkMount /* loadbalancer
AddDefaultCharset UTF-8
conf/workers.properties
파일은 사용자가 직접 빈 파일을 생성해야 합니다.

빈 파일 생성후 편집모드로 작성합니다.
worker.list=loadbalancer, status
worker.tomcat1.port=7591
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=100
worker.tomcat2.port=8090
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=100
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2
worker.loadbalancer.method=B
# B(Busyness), R(Requests), T(Traffic)
worker.status.type=status
Tomcat\Server.xml에 정의한
AJP/13 Connector의 jvmRoute의 명칭가 일치시켜 주면 됩니다.
was1/Server.xml -> jvmRoute=tomcat1
was1/Server.xml -> port=7591
was2/Server.xml -> jvmRoute=tomcat2
was2/Server.xml -> port=8090
이제 마지막으로 was1/was2 실행을 위한 Startup 작업을 해줘야 합니다.

기존에 있던
startup.bat / shutdown.bat
복사 / 붙여넣기를 통해 명칭을 변경합니다.

startup_was1.bat/shutdown_was1.bat
모두편집 모드로 들어가
set “CATALINA_HOMDE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81”
set “CATALINA_BASE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\was1”
set “SERVER_NAME=was1”
set “JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91”
추가해줍니다.
Apache 설치 및 Was1/was2 구동을 위한 경로
JDK 경로를 설정해줍니다.
————————————-
tartup_was2.bat/shutdown_was2.bat
모두편집 모드로 들어가
set “CATALINA_HOMDE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81”
set “CATALINA_BASE=C:\Users\User\Downloads\apache-tomcat-7.0.81-windows-x64\apache-tomcat-7.0.81\was2”
set “SERVER_NAME=was2”
set “JAVA_HOME=C:\Program Files\Java\jdk1.8.0_91”
추가해줍니다.
Apache 설치 및 Was1/was2 구동을 위한 경로
JDK 경로를 설정해줍니다.

Window의 서비스 모드에서
설치된 Apache24를 구동합니다.

마지막으로 Tomcat을 구동하고
localhost:80 포틀 접속하시면 끝이납니다.
한쪽 서버 부하로 인하여 서버가 중단 될경우
다른 한쪽 서버로 웹 어플리케이션이 연동되어
서비스를 운영하는 모드입니다.
테스트 절차는 was1/was2 구동
localhost:80 접속
was로그를 통해 구분 후 접속된 Was 내림
몇초 지난 후
localhost:80 기능 그대로 사용
다른 서버에 붙어서 접속 허용
지금까지
Window Apache Tomcat 로드 밸런싱 연동 과정이었습니다.
출처: https://seungkangmo.tistory.com/173 [Let’s Get It]