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脚本的相关配置,只需要更新这一套程序就行,也方便了日后的维护。多实例部署最大作用就是最大化利用服务器资源。