본문 바로가기

IT/frameworks

Tomcat Start Multi Bat


Tomcat 멀티 실행

Start Bat 생성



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"  maxPostSize="-1" maxKeepAliveRequests="-1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="500" maxSpareThreads="500" enableLoopups="false" acceptCount="500" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla.graviata" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css" disabledUploadTimeout="true" 

/>

<Connector port="7591"   redirectPort="8443" maxPostSize="-1" 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:\was\apache-tomcat\webapps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="was1" suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

<Context crossContext="true" path="" docBase="/KRRIBIM" reloadable="true"></Context>

<Context crossContext="true" path="applet" docBase="/applet" 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>



<?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"  maxPostSize="-1" maxKeepAliveRequests="-1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="500" maxSpareThreads="500" enableLoopups="false" acceptCount="500" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla.graviata" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css" disabledUploadTimeout="true" 

/>

<Connector port="7591"   redirectPort="8443" maxPostSize="-1" 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:\was\apache-tomcat\webapps" unpackWARs="true" autoDeploy="true">

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="was1" suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

<Context crossContext="true" path="" docBase="/KRRIBIM" reloadable="true"></Context>

<Context crossContext="true" path="applet" docBase="/applet" 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>


tomcat-Users.xml

<?xml version='1.0' encoding='utf-8'?>
 <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/> 
</tomcat-users>


Startup_was1.bat

@echo off

rem Licensed to the Apache Software Foundation (ASF) under one or more

rem contributor license agreements.  See the NOTICE file distributed with

rem this work for additional information regarding copyright ownership.

rem The ASF licenses this file to You under the Apache License, Version 2.0

rem (the "License"); you may not use this file except in compliance with

rem the License.  You may obtain a copy of the License at

rem

rem     http://www.apache.org/licenses/LICENSE-2.0

rem

rem Unless required by applicable law or agreed to in writing, software

rem distributed under the License is distributed on an "AS IS" BASIS,

rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

rem See the License for the specific language governing permissions and

rem limitations under the License.


rem ---------------------------------------------------------------------------

rem Start script for the CATALINA Server

rem ---------------------------------------------------------------------------


set "CATALINA_HOME=C:\was\apache-tomcat"

set "CATALINA_BASE=C:\was\apache-tomcat\was1"

set "SERVER_NAME=was1"

set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_65"


setlocal


rem Guess CATALINA_HOME if not defined

set "CURRENT_DIR=%cd%"

if not "%CATALINA_HOME%" == "" goto gotHome

set "CATALINA_HOME=%CURRENT_DIR%"

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

cd ..

set "CATALINA_HOME=%cd%"

cd "%CURRENT_DIR%"

:gotHome

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

echo The CATALINA_HOME environment variable is not defined correctly

echo This environment variable is needed to run this program

goto end

:okHome


set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"


rem Check that target executable exists

if exist "%EXECUTABLE%" goto okExec

echo Cannot find "%EXECUTABLE%"

echo This file is needed to run this program

goto end

:okExec


rem Get remaining unshifted command line arguments and save them in the

set CMD_LINE_ARGS=

:setArgs

if ""%1""=="""" goto doneSetArgs

set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1

shift

goto setArgs

:doneSetArgs


call "%EXECUTABLE%" start %CMD_LINE_ARGS%


:end


shutdown_was1.bat

@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements.  See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License.  You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem ---------------------------------------------------------------------------
rem Stop script for the CATALINA Server
rem ---------------------------------------------------------------------------

set "CATALINA_HOME=C:\was\apache-tomcat"
set "CATALINA_BASE=C:\was\apache-tomcat\was1"
set "SERVER_NAME=was1"
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_65"


setlocal

rem Guess CATALINA_HOME if not defined
set "CURRENT_DIR=%cd%"
if not "%CATALINA_HOME%" == "" goto gotHome
set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..
set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec

rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

call "%EXECUTABLE%" stop %CMD_LINE_ARGS%

:end

------------------------------------------------------------------

Startup_was2.bat
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="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"  maxPostSize="-1" maxKeepAliveRequests="-1" maxHttpHeaderSize="8192" maxThreads="1000" minSpareThreads="500" maxSpareThreads="500" enableLoopups="false" acceptCount="500" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla.graviata" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css" disabledUploadTimeout="true" />
<Connector port="7592"   redirectPort="8443" maxPostSize="-1" 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:\was\apache-tomcat\webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="was1" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
<Context crossContext="true" path="" docBase="/KRRIBIM" reloadable="true"></Context>
<Context crossContext="true" path="applet" docBase="/applet" 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>

------------------------------------------------------------------

같은 서버에서 포트만 다른 프로젝트를 실행해야 될 경우
여기서 포인트는 80, 81 포트 둘다 사용할 경우 둘중에 하나만 로드 밸런싱을 선택해야 함.
내가 잘 못해서 그런지 모르겠지만 둘다 걸 경우 하나의 프로젝트만 수행됨.
결론은 80은 2개의 톰캣 사용 81은 톰캣 1개 사용.

81Port
Server.xml
<?xml version='1.0' encoding='utf-8'?>

<Server port="8007" 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="81" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

<Connector port="7593" 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" maxPostSize="0"
connectionTimeout="600000" disabledUploadTimeout="true" Server="" protocol="AJP/1.3"  />
<Engine jvmRoute="tomcat3" 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:\was\apache-tomcat\webapps2" unpackWARs="true" autoDeploy="true">
<Context crossContext="true" path="/" docBase="KRRILIB" reloadable="true"></Context>
</Host>
</Engine>

 </Service>
</Server>

------------------------------------------------------------------
Apache -> conf -> httpd.conf

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

Apache -> conf -> workers.properties [사용자 생성 파일]

worker.list=loadbalancer, status , loadbalancer2


worker.tomcat1.port=7591


worker.tomcat1.host=localhost 


worker.tomcat1.type=ajp13


worker.tomcat1.lbfactor=100




worker.tomcat2.port=7592


worker.tomcat2.host=localhost


worker.tomcat2.type=ajp13


worker.tomcat2.lbfactor=100



#worker.tomcat3.port=7593


#worker.tomcat3.host=localhost


#worker.tomcat3.type=ajp13


#worker.tomcat3.lbfactor=100



worker.loadbalancer.type=lb


worker.loadbalancer.balanced_workers=tomcat1, tomcat2 


worker.loadbalancer.sticky_session=1


worker.loadbalancer.method=B   




#worker.loadbalancer2.type=lb


#worker.loadbalancer2.balanced_workers=tomcat3


#worker.loadbalancer2.method=B


#worker.status.type=status


#R[equest]  :  기본으로 설정되었으며  요청에 따른 분산

#S[ession]    :  연결된 세션에 따라 분산

#T[raffic]      :  발생되는 트래픽에 따라 분산

#B[usyness]  : 서버의 부하에 따른 분산시 이용한다.