tomcat多server配置实例
前言
通过tomcat多server配置,实现一台机器启动多个tomcat服务并监听不同端口。实现各server单独启停、war包统一管理、端口分离、配置文件分离、日志分离。
一、tomcat目录规划
其中粗体为文件夹,红色为需要修改的重要配置文件
|
一级目录
|
二级目录
|
说明
|
三级目录
|
四级conf下配置文件
|
|
tomcat
|
apache-tomcat-9.0.60
|
tomcat源文件所在目录
|
||
|
app
|
war包存放位置
|
project1_name.war
project2_name.war
|
||
|
app_soft
|
依赖包存放位置
|
|||
|
java
|
java环境存放位置
|
|||
|
server1
|
server1
|
conf
logs
temp
tomcat.pid
webapps
work
|
Catalina
catalina.policy
catalina.properties
context.xml
logging.properties
server.xml
tomcat-users.xml
tomcat-users.xsd
web.xml
|
|
|
server2
|
server2
|
|||
|
server3
|
server3
|
|||
|
tomcat.keysore
|
安全要求,密钥文件
|
|||
|
tomcat.sh
|
启动脚本
|
二、创建目录及配置文件
cd /data/tomcat mkdir app server1 server2 server3 touch tomcat.sh #给脚本文件加上可执行权限 chmod +x tomcat.sh cp -r conf server1 cd server1 mkdir logs temp webapps work touch tomcat.pid
三、配置文件修改
1、修改Catalina配置文件
该配置涉及启动路径,修改后可多server从同一文件夹读取war包启动
#进入配置所在目录 cd /data/tomcat/server1/conf/Catalina #改名 mv localhost server1 cd server1 #编辑工程名.xml文件 vi project1_name.xml #添加启动路径 <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" docBase="/data/tomcat/app/project1_name.war" path="/enodeb-fault"/>
2、修改server.xml配置文件
该配置涉及监听端口号
vi /data/tomcat/server1/conf/server.xml #可用该命令查看现有配置 perl -lne 'print unless (/<!--/../-->/)' server.xml
配置文件如下,一般分配与server编号一致的端口号避免端口冲突,以server2为例
其中2、21、23、27、35行为修改的部分
1 <?xml version="1.0" encoding="UTF-8"?> 2 <Server port="8002" shutdown="SHUTDOWN"> 3 <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 4 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 5 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 6 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 7 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 8 9 <GlobalNamingResources> 10 <Resource name="UserDatabase" auth="Container" 11 type="org.apache.catalina.UserDatabase" 12 description="User database that can be updated and saved" 13 factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 14 pathname="conf/tomcat-users.xml" /> 15 </GlobalNamingResources> 16 17 <Service name="Catalina"> 18 19 20 21 <Connector port="8082" protocol="HTTP/1.1" 22 connectionTimeout="20000" 23 redirectPort="8442" /> 24 25 26 27 <Engine name="Catalina" defaultHost="server2"> 28 29 30 <Realm className="org.apache.catalina.realm.LockOutRealm"> 31 <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 32 resourceName="UserDatabase"/> 33 </Realm> 34 35 <Host name="server2" appBase="webapps" 36 unpackWARs="true" autoDeploy="true"> 37 38 39 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 40 prefix="localhost_access_log" suffix=".txt" 41 pattern="%h %l %u %t "%r" %s %b" /> 42 43 </Host> 44 </Engine> 45 </Service> 46 </Server>
3、修改context.xml配置文件
该配置涉及数据源配置,由于该实例不涉及,略
四、启动脚本编写
启动脚本如下:
1 #!/bin/sh 2 ## ./tomcat.sh serverX restart 重启 3 ## ./tomcat.sh serverX start 启动 4 ## ./tomcat.sh serverX stop 停止 5 6 #tomcat 目录 7 export SERVER_ID=$1 8 export CATALINA_HOME="/data/tomcat" 9 export CATALINA_BASE="/data/tomcat/$SERVER_ID" 10 export CATALINA_TMPDIR="$CATALINA_BASE/temp" 11 export CATALINA_PID="$CATALINA_BASE/tomcat.pid" 12 13 #变量 14 USER=`whoami` 15 16 17 18 if [ $USER == "cnms_user" ];then 19 20 if [ $1 == "server1" ];then 21 if [ -d "$CATALINA_BASE" ];then 22 export JAVA_OPTS="-server -Xms1024m -Xmx2048m -Djava.awt.headless=true -Dtomcat.name=$SERVER_ID -Djava.rmi.server.hostname=xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 23 24 else 25 echo "$CATALINA_BASE不存在" 26 exit 27 fi 28 elif [ $1 == "server2" ];then 29 if [ -d "$CATALINA_BASE" ];then 30 export JAVA_OPTS="-server -Xms1024m -Xmx2048m -Djava.awt.headless=true -Dtomcat.name=$SERVER_ID -Djava.rmi.server.hostname=xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 31 else 32 echo "$CATALINA_BASE不存在" 33 exit 34 fi 35 elif [ $1 == "server3" ];then 36 if [ -d "$CATALINA_BASE" ];then 37 export JAVA_OPTS="-server -Xms1024m -Xmx2048m -Djava.awt.headless=true -Dtomcat.name=$SERVER_ID -Djava.rmi.server.hostname=xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 38 else 39 echo "$CATALINA_BASE不存在" 40 exit 41 fi 42 elif [ $1 == "server4" ];then 43 if [ -d "$CATALINA_BASE" ];then 44 export JAVA_OPTS="-server -Xms1024m -Xmx2048m -Djava.awt.headless=true -Dtomcat.name=$SERVER_ID -Djava.rmi.server.hostname=xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 45 else 46 echo "$CATALINA_BASE不存在" 47 exit 48 fi 49 else 50 echo "no server" 51 exit 52 fi 53 54 55 case "$2" in 56 start) 57 58 59 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep $SERVER_ID |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 60 if [ $TOMCAT_PID ] ; then 61 echo "tomcat-$SERVER_ID运行中,进程ID是$TOMCAT_PID。关闭请执行tstop $SERVER_ID" 62 63 else 64 echo "tomcat-$SERVER_ID启动中..." 65 cd $CATALINA_BASE 66 bash $CATALINA_HOME/bin/startup.sh 67 sleep 10; 68 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep $SERVER_ID |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 69 if [ $TOMCAT_PID ] ; then 70 echo "tomcat-$SERVER_ID启动完成,进程ID是$TOMCAT_PID,请观察日志" 71 else 72 echo "tomcat-$SERVER_ID启动失败,请检查" 73 exit 74 fi 75 fi 76 ;; 77 78 stop) 79 80 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep "$SERVER_ID" |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 81 if [ $TOMCAT_PID ] ; then 82 echo "进程ID是$TOMCAT_PID,tomcat-$SERVER_ID进程关闭中..." 83 sleep 1; 84 bash $CATALINA_HOME/bin/shutdown.sh 85 sleep 10; 86 else 87 echo "tomcat-$SERVER_ID进程已关闭。启动请执行tstart $SERVER_ID" 88 exit 89 fi 90 91 while true 92 do 93 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep "$SERVER_ID" |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 94 if [ $TOMCAT_PID ] ; then 95 echo "tomcat-$SERVER_ID进程未正常关闭。执行kill" 96 kill -9 $TOMCAT_PID 97 sleep 2; 98 else 99 echo "tomcat-$SERVER_ID进程已关闭。启动请执行tstart $SERVER_ID" 100 break; 101 fi 102 done 103 ;; 104 105 restart) 106 107 108 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep $SERVER_ID |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 109 if [ $TOMCAT_PID ] ; then 110 echo "进程ID是$TOMCAT_PID,tomcat-$SERVER_ID进程关闭中..." 111 sleep 1; 112 bash $CATALINA_HOME/bin/shutdown.sh 113 sleep 10; 114 else 115 echo "tomcat-$SERVER_ID进程已关闭。启动请执行tstart $SERVER_ID" 116 exit 117 fi 118 119 120 while true 121 do 122 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep $SERVER_ID |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 123 if [ $TOMCAT_PID ] ; then 124 echo "tomcat-$SERVER_ID进程未正常关闭。执行kill" 125 kill -9 $TOMCAT_PID 126 sleep 2; 127 else 128 echo "tomcat-$SERVER_ID进程已关闭。准备启动" 129 break; 130 fi 131 done 132 133 echo "tomcat-$SERVER_ID启动中..." 134 cd $CATALINA_BASE 135 bash $CATALINA_HOME/bin/startup.sh 136 sleep 10; 137 TOMCAT_PID=`ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd | grep java | grep tomcat | grep $SERVER_ID |grep -v grep | awk '{if ($1=="'"$USER"'") print $2}'` 138 if [ $TOMCAT_PID ] ; then 139 echo "tomcat-$SERVER_ID启动完成,进程ID是$TOMCAT_PID,请观察日志" 140 else 141 echo "tomcat-$SERVER_ID启动失败,请检查" 142 exit 143 fi 144 145 ;; 146 esac 147 148 else 149 150 echo "当前执行用户是$USER,请用cnms_user用户执行" 151 152 fi 153 154 exit
五、配置环境变量快捷启动
vi $HOME/.bashrc #添加如下内容 alias tstart='tomcat_start() { /data/tomcat/tomcat.sh $1 start;};tomcat_start' alias tstop='tomcat_stop() { /data/tomcat/tomcat.sh $1 stop;};tomcat_stop' alias trestart='tomcat_restart() { /data/tomcat/tomcat.sh $1 restart;};tomcat_restart' #立即生效 source $HOME/.bashrc
浙公网安备 33010602011771号