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 &quot;%r&quot; %s %b" />
42 
43       </Host>
44     </Engine>
45   </Service>
46 </Server>
server.xml
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
tomcat.sh
五、配置环境变量快捷启动
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
 
posted @ 2022-09-13 15:07  不爱学习的老王  阅读(613)  评论(0)    收藏  举报