tomcat配置多实例

单实例单应用

正常安装部署之后,运行一个webapp

单实例多应用

正常安装部署之后,运行多个不同的webapp;就是将多个webapp项目的war包,放到appbase指定的那个目录下就好,启动服务时tomcat自动运行代码,简单的讲,就是一个Tomcat运行多个应用而已,还是在同一个进程上运行的

多实例单应用(且nginx做负载均衡)

  • 环境
主机 软件
nginx:192.168.111.3 nginx-1.14.2
tomcat:192.168.111.4 apache-tomcat-8.5.16
  • 结构图

使用3个tomcat实例部署同一个项目将端口号修改为不同的

[root@localhost ~]# rm -rf /usr/bin/java
#将系统自带jdk删除,很多功能不全


[root@localhost ~]# tar zxf jdk-8u201-linux-x64.tar.gz 
[root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java

[root@localhost ~]# vim /etc/profile
    export JAVA_HOME=/usr/local/java
    export PATH=$PATH:$JAVA_HOME/bin

[root@localhost ~]# . /etc/profile

[root@localhost ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

[root@localhost ~]# javac -version
javac 1.8.0_201

[root@localhost ~]# tar zxf apache-tomcat-8.5.16.tar.gz 
[root@localhost ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat8
#配置安装tomcat

[root@localhost ~]# mkdir -pv /usr/local/tomcat_instance/tomcat{1,2,3}/{bin,conf}
#工作目录

[root@localhost ~]# cp /usr/local/tomcat8/conf/* /usr/local/tomcat_instance/tomcat1/conf/
[root@localhost ~]# cp /usr/local/tomcat8/conf/* /usr/local/tomcat_instance/tomcat2/conf/
[root@localhost ~]# cp /usr/local/tomcat8/conf/* /usr/local/tomcat_instance/tomcat3/conf/
#相关配置文件进行拷贝

#编辑tomcat起停脚本
[root@localhost local]# vim /usr/local/tomcat_instance/tomcat1/bin/startup.sh
#!/bin/bash
export JRE_HOME=/usr/local/java/jre
export CATALINA_HOME=/usr/local/tomcat8
export CATALINA_BASE="/usr/local/tomcat_instance/tomcat1"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat1"
#-server:一定要作为第一个参数,在多个CPU时性能佳;-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些;-Xmx:javaheap最大值,使用的最大内>存;
#Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标,因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。相当于告诉程序,自力更生,依靠系统计算能力模拟出这些硬件的特性来;设置这些变量供后面Java读取

#创建logs目录

if [ ! -d "$CATALINA_BASE/logs" ]; then
  mkdir $CATALINA_BASE/logs

fi

#创建temp目录

if [ ! -d "$CATALINA_BASE/temp" ]; then
  mkdir $CATALINA_BASE/temp

fi

# 调用tomcat启动脚本

bash $CATALINA_HOME/bin/startup.sh "$@"
[root@localhost local]# vim /usr/local/tomcat_instance/tomcat1/bin/shutdown.sh
#!/bin/bash
export JRE_HOME=/usr/lcoal/java/jre

export CATALINA_HOME=/usr/local/tomcat8

export CATALINA_BASE="/usr/local/tomcat_instance/tomcat1"

export CATALINA_TMPDIR="$CATALINA_BASE/temp"

export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"

bash $CATALINA_HOME/bin/shutdown.sh "$@"
  • 将以上起停脚本复制到tomcat2,和3的目录下,注意修改CATALINA_BASE的路径。

[root@localhost ~]# chmod +x /usr/local/tomcat_instance/tomcat{1,2,3}/bin/*

  • 以下是修改配置文件中的端口,避免冲突(Server port、 Connector port、AJP)
[root@localhost local]# vim /usr/local/tomcat_instance/tomcat2/conf/server.xml 
    <Server port="8005" shutdown="SHUTDOWN">
    <Connector port="8080" protocol="HTTP/1.1"
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
[root@localhost local]# vim /usr/local/tomcat_instance/tomcat2/conf/server.xml 
#进行端口的修改:(Server port、Connector port、AJP)
    <Server port="8015" shutdown="SHUTDOWN">
    <Connector port="8090" protocol="HTTP/1.1"
    <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
    
[root@localhost local]# vim /usr/local/tomcat_instance/tomcat3/conf/server.xml 
#进行端口的修改:(Server port、Connector port、AJP)
    <Server port="8025" shutdown="SHUTDOWN">
    <Connector port="8070" protocol="HTTP/1.1"
    <Connector port="8029" protocol="AJP/1.3" redirectPort="8443" />
    
[root@localhost local]# mkdir /usr/local/tomcat_instance/tomcat{1,2,3}/webapps/ROOT -pv
#测试用到的默认网页目录

[root@localhost local]# echo "welcom tomcat1" > /usr/local/tomcat_instance/tomcat1/webapps/ROOT/index.jsp
[root@localhost local]# echo "welcom tomcat2" > /usr/local/tomcat_instance/tomcat2/webapps/ROOT/index.jsp
[root@localhost local]# echo "welcom tomcat3" > /usr/local/tomcat_instance/tomcat3/webapps/ROOT/index.jsp
#测试页



[root@localhost ~]# /usr/local/tomcat_instance/tomcat1/bin/startup.sh 

[root@localhost ~]# /usr/local/tomcat_instance/tomcat2/bin/startup.sh 

[root@localhost ~]# /usr/local/tomcat_instance/tomcat3/bin/startup.sh 


[root@localhost ~]# netstat -lnpt | grep java
tcp6       0      0 :::8029                 :::*                    LISTEN      64828/java          
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      64717/java          
tcp6       0      0 :::8070                 :::*                    LISTEN      64828/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      64717/java          
tcp6       0      0 127.0.0.1:8015          :::*                    LISTEN      64773/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      64717/java          
tcp6       0      0 :::8019                 :::*                    LISTEN      64773/java          
tcp6       0      0 127.0.0.1:8025          :::*                    LISTEN      64828/java          
tcp6       0      0 :::8090                 :::*                    LISTEN      64773/java          
#可以看到使用的是不同的端口,每个实例的进程号也不相同。


[root@localhost ~]# curl http://192.168.111.4:8080
welcom tomcat1
[root@localhost ~]# curl http://192.168.111.4:8090
welcom tomcat2
[root@localhost ~]# curl http://192.168.111.4:8070
welcom tomcat3
  • 负载均衡
[root@promote ~]# vim /usr/local/nginx/conf/nginx.conf

http {
    ...
    upstream tomcatserver {
        server 192.168.111.4:8080 weight=1;
        server 192.168.111.4:8090 weight=1;
        server 192.168.111.4:8070 weight=1;
        }
    ...
    server {
        ...
        location ~ \.jsp$ {
          proxy_pass http://tomcatserver;
        }

[root@promote ~]# killall -HUP nginx


[root@promote ~]# curl 192.168.111.3/index.jsp
welcom tomcat1
[root@promote ~]# curl 192.168.111.3/index.jsp
welcom tomcat2
[root@promote ~]# curl 192.168.111.3/index.jsp
welcom tomcat3

至此,也算是一个简单的多实例单应用并且结合nginx负载均衡算是完成,想真正应用于生产环境,还有诸多考虑的因素,有利有弊,结合实际环境谨慎使用

多实例多应用

在以上配置中的起停脚本当中
CATALINA_HOME指的是tomcat自身的安装配置文件
CATALINA_BASE指的是tomcat上运行的实例的配置文件和应用的代码
这样做的好处就是升级 tomcat 或修改tomcat脚本的相关配置,只需要更新这一套程序就行,也方便了日后的维护。多实例部署最大作用就是最大化利用服务器资源。