####环境
CATALINA_HOME /data/app/tomcat-7.0.64 tomcat程序所在目录
CATALINA_BASE /data/app/tomcat-1 每个tomcat实例配置文件,work,临时文件的目录 /data/app/tomcat-2
####多实例启动准备
- 准备catalina_base并拷贝必要文件
# mkdir tomcat-1
# mdkir tomcat-2
# cp -a tomcat-7.0.64/{conf,logs,webapps,work,temp} tomcat-1/
# cp -a tomcat-7.0.64/{conf,logs,webapps,work,temp} tomcat-2/
- 修改配置文件,修改端口防止端口冲突
# cat tomcat-1/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="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine 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="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
# cat tomcat-2/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="8444" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
<Engine 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="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
多实例启动tomcat
# export CATALINA_HOME=/data/app/tomcat-7.0.64/
# export CATALINA_BASE=/data/app/tomcat-1/
# /data/app/tomcat-7.0.64/bin/startup.sh
Using CATALINA_BASE: /data/app/tomcat-1/
Using CATALINA_HOME: /data/app/tomcat-7.0.64/
Using CATALINA_TMPDIR: /data/app/tomcat-1//temp
Using JRE_HOME: /data/app/jdk1.7.0_80
Using CLASSPATH: /data/app/tomcat-7.0.64//bin/bootstrap.jar:/data/app/tomcat-7.0.64//bin/tomcat-juli.jar
Tomcat started.
# export CATALINA_BASE=/data/app/tomcat-2/
# /data/app/tomcat-7.0.64/bin/startup.sh
Using CATALINA_BASE: /data/app/tomcat-2/
Using CATALINA_HOME: /data/app/tomcat-7.0.64/
Using CATALINA_TMPDIR: /data/app/tomcat-2//temp
Using JRE_HOME: /data/app/jdk1.7.0_80
Using CLASSPATH: /data/app/tomcat-7.0.64//bin/bootstrap.jar:/data/app/tomcat-7.0.64//bin/tomcat-juli.jar
Tomcat started.
- 查看tomcat进程已多实例启动
# ps aux|grep tomcat
root 2691 4.3 2.9 1363648 57564 pts/1 Sl 21:23 0:02 /data/app/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/data/app/tomcat-1//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Djava.endorsed.dirs=/data/app/tomcat-7.0.64//endorsed -classpath /data/app/tomcat-7.0.64//bin/bootstrap.jar:/data/app/tomcat-7.0.64//bin/tomcat-juli.jar -Dcatalina.base=/data/app/tomcat-1/ -Dcatalina.home=/data/app/tomcat-7.0.64/ -Djava.io.tmpdir=/data/app/tomcat-1//temp org.apache.catalina.startup.Bootstrap start
root 2763 67.0 2.9 1362952 57440 pts/1 Sl 21:23 0:02 /data/app/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/data/app/tomcat-2//conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Djava.endorsed.dirs=/data/app/tomcat-7.0.64//endorsed -classpath /data/app/tomcat-7.0.64//bin/bootstrap.jar:/data/app/tomcat-7.0.64//bin/tomcat-juli.jar -Dcatalina.base=/data/app/tomcat-2/ -Dcatalina.home=/data/app/tomcat-7.0.64/ -Djava.io.tmpdir=/data/app/tomcat-2//temp org.apache.catalina.startup.Bootstrap start
####不同实例参数的不同的解决
相同的参数可以写在$CATALINA_HOME/bin/catalina.sh里,但是有些参数是得单独写的,比如jmx的端口 使用脚本启动
- 启动脚本
# cat /data/app/tomcat-1/tomcat.sh
#!/bin/sh
. /etc/init.d/functions
RETVAL=$?
# tomcat实例目录
export CATALINA_BASE="/data/app/tomcat-1"
# tomcat安装目录
export CATALINA_HOME="/data/app/tomcat-7.0.64"
# 可选
export JVM_OPTIONS="$JAVA_OPTS -server -Xmx128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m"
export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=$ip -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Start Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stop Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
# cat /data/app/tomcat-2/tomcat.sh
#!/bin/sh
. /etc/init.d/functions
RETVAL=$?
# tomcat实例目录
export CATALINA_BASE="/data/app/tomcat-2"
# tomcat安装目录
export CATALINA_HOME="/data/app/tomcat-7.0.64"
# 可选
export JVM_OPTIONS="$JAVA_OPTS -server -Xmx512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m"
export CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=$ip -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9006 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];then
echo $"Start Tomcat"
$CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];then
echo $"Stop Tomcat"
$CATALINA_HOME/bin/shutdown.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
- 使用脚本启动tomcat
# sh /data/app/tomcat-1/tomcat.sh stop
# sh /data/app/tomcat-1/tomcat.sh start
# sh /data/app/tomcat-2/tomcat.sh stop
# sh /data/app/tomcat-2/tomcat.sh start
- 启动
# ps aux|grep tomcat
root 2980 8.6 3.0 1365780 57768 pts/1 Sl 21:33 0:02 /data/app/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/data/app/tomcat-1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Djava.rmi.server.hostname= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9005 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/data/app/tomcat-7.0.64/endorsed -classpath /data/app/tomcat-7.0.64/bin/bootstrap.jar:/data/app/tomcat-7.0.64/bin/tomcat-juli.jar -Dcatalina.base=/data/app/tomcat-1 -Dcatalina.home=/data/app/tomcat-7.0.64 -Djava.io.tmpdir=/data/app/tomcat-1/temp org.apache.catalina.startup.Bootstrap start
root 3066 20.1 3.1 1366796 60308 pts/1 Sl 21:34 0:02 /data/app/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/data/app/tomcat-2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -XX:+UseCMSInitiatingOccupancyOnly -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Djava.rmi.server.hostname= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9006 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/data/app/tomcat-7.0.64/endorsed -classpath /data/app/tomcat-7.0.64/bin/bootstrap.jar:/data/app/tomcat-7.0.64/bin/tomcat-juli.jar -Dcatalina.base=/data/app/tomcat-2 -Dcatalina.home=/data/app/tomcat-7.0.64 -Djava.io.tmpdir=/data/app/tomcat-2/temp org.apache.catalina.startup.Bootstrap start