Tomcat 常见的几种部署场景
通常,我们在同一台服务器上对 Tomcat 部署需求可以分为以下几种:单实例单应用,单实例多应用,多实例单应用,多实例多应用。实例的概念可以理解为上面说的一个 Tomcat 目录。
单实例单应用:比较常用的一种方式,只需要把你打好的 war 包丢在 webapps目录下,执行启动 Tomcat 的脚本就行了。
单实例多应用:有两个不同的 Web 项目 war 包,还是只需要丢在webapps目录下,执行启动 Tomcat 的脚本,访问不同项目加上不同的虚拟目录。这种方式要慎用在生产环境,因为重启或挂掉 Tomcat 后会影响另外一个应用的访问。
多实例单应用:多个 Tomcat 部署同一个项目,端口号不同,可以利用 Nginx 这么做负载均衡,当然意义不大。
多实例多应用:多个 Tomcat 部署多个不同的项目。这种模式在服务器资源有限,或者对服务器要求并不是很高的情况下,可以实现多个不同项目部署在同一台服务器上的需求,来实现资源使用的最大化。-
这次其实要说的就是这种方式,但多个 Tomcat 就是简单的复制出一个新的 Tomcat 目录后改一下端口么?这样做也太 Low 了点吧?哈哈,其实并不是低端没技术含量的问题,当你同一台服务器部署了多个不同基于 Tomcat 的 Web 服务时,会迎来下面几个极其现实的问题。
当你需要对数十台 Tomcat 版本进行升级的时候,你需要怎么做?
当你需要针对每一个不同的 Web 服务分配不用的内存时,你需要怎么做?
当你需要启动多台服务器时,你需要怎么做?
当然,好像上面的都不是很重要,注意,划重点,多实例部署最大作用就是最大化利用服务器资源
官方建议如下:
1:清除已安装其他版本的jdk
rpm -qa | grep jdk
rpm -e --nodeps jdk
关闭selinux和防火墙:
systemctl stop iptables;systemctl stop firewalld;setenforce 0
2:安装jdk
https://blog.csdn.net/zzhlinux911218/article/details/85333152
3:安装tomcat
cd /opt;wget http://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
tar -zxf apache-tomcat-8.5.37.tar.gz
[root@beiyong opt]# mkdir tomcat-1 tomcat-2
[root@beiyong opt]# cd apache-tomcat-8.5.37
[root@beiyong apache-tomcat-8.5.37]# mv conf/ webapps/ temp/ logs/ work/ -t ../tomcat-1
[root@beiyong apache-tomcat-8.5.37]# cd ../tomcat-1
[root@beiyong tomcat-1]# cp -r * ../tomcat-2
4:到tomcat-1 tomcat-2的同一级目录下,建立启动和停止脚本:
[root@beiyong tomcat-1]# cd ..
[root@beiyong opt]# ls
apache-tomcat-8.5.37 apache-tomcat-8.5.37.tar.gz tomcat-1 tomcat-2
[root@beiyong opt]# mkdir tomcat-shell
[root@beiyong opt]# cd tomcat-shell
5:建立启动脚本:
vim start-tomcat.sh
#!/bin/bash
export CATALINA_HOME=/opt/apache-tomcat-8.5.37
export CATALINA_BASE=${1%/}
echo $CATALINA_BASE
TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'`
if [ -n "$TOMCAT_ID" ] ; then
echo "tomcat(${TOMCAT_ITOMCAT_ID}) still running now , please shutdown it firest";
exit 2;
fi
TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh`
if [ "$?" = "0" ]; then
echo "$0 ${1%/} start succeed"
else
echo "$0 ${1%/} start failed"
echo $TOMCAT_START_LOG
fi
6:建立停止脚本:
vim stop-tomcat.sh
#!/bin/bash
export CATALINA_HOME=/opt/apache-tomcat-8.5.37
export CATALINA_BASE=${1%/}
echo $CATALINA_BASE
TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'`
if [ -n "$TOMCAT_ID" ] ; then
TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh`
else
echo "Tomcat instance not found : ${1%/}"
exit
fi
if [ "$?" = "0" ]; then
echo "$0 ${1%/} stop succeed"
else
echo "$0 ${1%/} stop failed"
echo $TOMCAT_STOP_LOG
fi
7:加上可执行权限:
[root@beiyong opt]# chmod +x start-tomcat.sh stop-tomcat.sh
8:修改端口:
同一个服务器部署不同 Tomcat 要设置不同的端口,不然会报端口冲突,所以我们只需要修改conf/server.xml中的其中前三个端口就行了。但它有四个分别是:
说明:
Server Port:该端口用于监听关闭tomcat的shutdown命令,默认为8005 #--需要修改
Connector Port:该端口用于监听HTTP的请求,默认为8080 #--需要修改
AJP Port:该端口用于监听AJP( Apache JServ Protocol )协议上的请求,通常用于整合Apache Server等其他HTTP服务器,默认为8009 #--需要修改
Redirect Port:重定向端口,出现在Connector配置中,如果该Connector仅支持非SSL的普通http请求,那么该端口会把 https 的请求转发到这个Redirect Port指定的端口,默认为8443
9:修改tomcat-1的端口:
vim /opt/tomcat-1/conf/server.xml
22 <Server port="8006" shutdown="SHUTDOWN"> 把8005修改成8006
69 <Connector port="8081" protocol="HTTP/1.1" #把8080修改8081
115 <!-- Define an AJP 1.3 Connector on port 8009 -->
116 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #把8009改成8010
10:修改tomcat-2的端口:
vim /opt/tomcat-2/conf/server.xml
22 <Server port="8006" shutdown="SHUTDOWN"> 把8005修改成8007
69 <Connector port="8081" protocol="HTTP/1.1" #把8080修改8082
115 <!-- Define an AJP 1.3 Connector on port 8009 -->
116 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #把8009改成8011
11:建立tomcat-1的web首页文件:(等下用来验证web页面的)
vim /opt/tomcat-1/webapps/ROOT/index.html
<html>
<title>Tomcat-1</title>
<body>
Hello Mafly! from Tomcat-1
</body>
</html>
12:建立tomcat-2的web首页文件:(等下用来验证web页面的)
vim /opt/tomcat-2/webapps/ROOT/index.html
<html>
<title>Tomcat-2</title>
<body>
Hello Mafly! from Tomcat-2
</body>
</html>
13:启动tomcat-1服务:
[root@beiyong tomcat-shell]# ./start-tomcat.sh /opt/tomcat-1
/opt/tomcat-1
./start-tomcat.sh /opt/tomcat-1 start succeed
查看tomcat-1服务进程:
[root@beiyong tomcat-shell]# ps -ef | grep tomcat-1
root 14183 1 56 17:44 pts/2 00:00:02 /usr/java/jdk1.8.0_201/bin/java -Djava.util.logging.config.file=/opt/tomcat-1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-8.5.37/bin/bootstrap.jar:/opt/apache-tomcat-8.5.37/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat-1 -Dcatalina.home=/opt/apache-tomcat-8.5.37 -Djava.io.tmpdir=/opt/tomcat-1/temp org.apache.catalina.startup.Bootstrap start
root 14227 13627 0 17:44 pts/2 00:00:00 grep --color=auto tomcat-1
14:启动tomcat-2服务:
[root@beiyong tomcat-shell]# ./start-tomcat.sh /opt/tomcat-2
/opt/tomcat-2
./start-tomcat.sh /opt/tomcat-2 start succeed
查看tomcat-2服务进程:
[root@beiyong tomcat-shell]# ps -ef | grep tomcat-2
root 13985 1 0 17:39 pts/2 00:00:03 /usr/java/jdk1.8.0_201/bin/java -Djava.util.logging.config.file=/opt/tomcat-2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-8.5.37/bin/bootstrap.jar:/opt/apache-tomcat-8.5.37/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat-2 -Dcatalina.home=/opt/apache-tomcat-8.5.37 -Djava.io.tmpdir=/opt/tomcat-2/temp org.apache.catalina.startup.Bootstrap start
root 14229 13627 0 17:44 pts/2 00:00:00 grep --color=auto tomcat-2
15:访问web端验证:
访问 http://ip:8081
访问 http://ip:8082
为了更方便的启动:
16:创建tomcat1的启动和停止脚本:
vim /usr/bin/tomcat1-8081
#!/bin/bash
case $1 in
start)
bash /opt/tomcat-shell/start-tomcat.sh /opt/tomcat-1
;;
stop)
bash /opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-1
;;
restart)
bash /opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-1
bash /opt/tomcat-shell/start-tomcat.sh /opt/tomcat-1
;;
*)
echo "(start|stop|restart)"
;;
esac
加上可执行权限:
chmod +x /usr/bin/tomcat1-8081
使用如下:
[root@beiyong bin]# tomcat1-8081 stop
/opt/tomcat-1
/opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-1 stop succeed
[root@beiyong bin]# tomcat1-8081 start
/opt/tomcat-1
/opt/tomcat-shell/start-tomcat.sh /opt/tomcat-1 start succeed
[root@beiyong bin]# tomcat1-8081 restart
/opt/tomcat-1
/opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-1 stop succeed
/opt/tomcat-1
/opt/tomcat-shell/start-tomcat.sh /opt/tomcat-1 start succeed
为了更方便的启动:
17:创建tomcat2的启动和停止脚本:
vim /usr/bin/tomcat2-8082
#!/bin/bash
case $1 in
start)
bash /opt/tomcat-shell/start-tomcat.sh /opt/tomcat-2
;;
stop)
bash /opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-2
;;
restart)
bash /opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-2
bash /opt/tomcat-shell/start-tomcat.sh /opt/tomcat-2
;;
*)
echo "(start|stop|restart)"
;;
esac
加上可执行权限:
chmod +x /usr/bin/tomcat2-8082
使用如下:
[root@beiyong bin]# tomcat2-8082 stop
/opt/tomcat-2
/opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-2 stop succeed
[root@beiyong bin]# tomcat2-8082 start
/opt/tomcat-2
/opt/tomcat-shell/start-tomcat.sh /opt/tomcat-2 start succeed
[root@beiyong bin]# tomcat2-8082 restart
/opt/tomcat-2
/opt/tomcat-shell/stop-tomcat.sh /opt/tomcat-2 stop succeed
/opt/tomcat-2
/opt/tomcat-shell/start-tomcat.sh /opt/tomcat-2 start succeed