Tomcat单机多实例
Tomcat的目录结构:
bin – 包含所有运行tomcat的二进制和脚本文件
lib – 包含tomcat使用的所有共享库
conf - 包含配置信息,如tomcat绑定的端口等
l server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等;
l tomcatusers.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
l web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
l context.xml:对所有应用的统一配置,通常我们不会去配置它。
logs – 包含所有的日志文件
temp – 此目录是tomcat存放的临时文件
webapps – 此目录非常重要,这里存放所有的应用程序war包(项目包). 存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/1607a,进入示例项目。其中1607a就是项目名,即文件夹的名字。
work – 如果应用程序包含jsp文件,那么每个jsp文件会被编译转化为servlet,存放于此,运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
运行Tomcat时,会用到5个环境变量:
CATALINA_HOME
CATALINA_BASE
CATALINA_TMPDIR
JRE_HOME/JAVA_HOME
CLASSPATH
在以上列表中,CATALINA_HOME和JAVA_HOME是必要的环境变量。其它的都可以通过CATALINA_HOME来转换,是可选的。
CATALINA_HOME – 此环境变量是tomcat安装/提取的根目录。所以通过CATALINA_HOME,可以得到bin和lib目录。
CATALINA_BASE – 如果不指定则是CATALINA_HOME的值。该变量指向的目录里面包括每个运行实例需要使用自己的conf、logs、temp、webapps、work目录。
一般运行Tomcat的方法是,只设置CATALINA_HOME变量,执行startup.sh脚本,startup.sh会自动转换其它未设置的变量。
当一个进程的线程超过500个的话,那么这个进程的运行效率会变得很低。因为一个进程产生过多的线程,CPU资源会浪费在线程间切换过程当中。但当服务器配置很高的情况下,如:32G内存,16核的CPU。这样一台高配的机器上只装一个Tomcat实例,会有点浪费。其实我们可以根据服务器的硬件配置,配置多个Tomcat实例,充分利用硬件的资源。你第一时间可能会想到,直接下载多份Tomcat安装包,直接解压,改下端口跑起来不就可以了? 这样也是可以的,但不好维护。假设你在一台机器上安装了5个Tomcat实例,日后要升级Tomcat时,你需要将新版本的tomcat复制并覆盖掉旧的5个tomcat安装程序和配置,所以还是挺麻烦的。下面介绍多个Tomcat实例共享同一个安装包的配置方法。
安装部署环境:
Jdk版本以及安装目录:
Jdk版本:1.8.0_20 目录:/usr/java
Tomcat版本:apache-tomcat-7.0.47.tar.gz
Tomcat安装目录:/usr/local/tomcat_all
Tomcat中两个实例的目录(组成一个小集群):
/usr/local/tomcats/tomcat1
/usr/local/tomcats/tomcat2
安装jdk:
# rpm -ivh jdk-8u20-linux-x64.rpm
添加环境变量:
# vi /etc/profile
######java use####
export JAVA_HOME=/usr/java/jdk1.8.0_20
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
验证是否安装成功:
# source /etc/profile
# java –version
安装Tomcat:
关闭防火墙和selinux
# service iptables stop
# vi /etc/selinux/config
# tar zxf apache-tomcat-7.0.47.tar.gz
# mv apache-xxxxx /usr/local/tomcat_all
# cp –r apache-tomcat-7.0.47 /usr/local/tomcat_all
拷贝Tomcat安装目录下的conf目录分别到两个实例的目录中。
# mkdir /usr/local/tomcats
# mkdir /usr/local/tomcats/tomcat1
# mkdir /usr/local/tomcats/tomcat2
# cp -r /usr/local/tomcat_all/conf/ /usr/local/tomcats/tomcat1/
# cp -r /usr/local/tomcat_all/conf/ /usr/local/tomcats/tomcat2/
分别修改以上两个实例中的server.xml中三个端口(Server、HTTP、AJP),不要和其它实例的端口或系统已经占用的端口发生冲突。
# vi /usr/local/tomcats/tomcat1/conf/server.xml
# vi /usr/local/tomcats/tomcat2/conf/server.xml
创建实例部署的应用目录(可以不修改,直接放在Tomcat_all安装目录的webapps目录中,如果重新设置,需要到server.xml中进行配置项修改appBase)。
创建启动和停止脚本:
启动脚本:
# cd /usr/local/tomcat/tomcat1
# mkdir bin
# vi startup.sh
#!/bin/bash
export JRE_HOME=/usr/java/jdk1.8.0_20/jre
export CATALINA_HOME=/usr/local/tomcat_all
export CATALINA_BASE="/usr/local/tomcats/tomcat1"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
#创建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 "$@"
# chmod +x startup.sh
同理做Tomcat2的即可。
停止脚本:
# cd /usr/local/tomcat/tomcat1/bin
# vi shutdown.sh
#!/bin/bash
export JRE_HOME=/usr/java/jdk1.8.0_20/jre
export CATALINA_HOME=/usr/local/tomcat_all
export CATALINA_BASE="/usr/local/tomcat/tomcat1"
export CATALINA_TMPDIR="$CATALINA_BASE/temp"
export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
bash $CATALINA_HOME/bin/shutdown.sh "$@"
# chmod +x shutdown.sh
Tomcat2中做相应的修改即可。
服务器启动之后,会分别在相应的实例目录下生成logs、temp、work和webapps目录。另外也可以在实例目录下创建lib目录,用于存放app的jar。现在来看实例的安装目录,就和tomcat的安装包解压后的目录结构一样了,但所有实例共享同一套tomcat安装程序的bin和lib。后面如果需要升级tomcat或修改tomcat脚本的相关配置,只需要更新这一套程序就行,也方便了日后的维护。
Tomcat配置文件中端口号:
Shutdown port – 此端口用于关闭Tomcat。当执行shutdown.sh脚本时,它会给此端口发出一个信号,Tomcat的进程会监听此端口,如果接收到这样的信号,进程会清理退出。
Connector port - 此端口是应用对外公开发布的端口。
ajp port – Web服务器(例如Apache的httpd Server)通过此端口和Tomcat进行通信,也可以使用它设置一个负载均衡服务器。
上面配置了配置server port =8105,connector port = 8081,ajp port = 8109
Redirect port – 如果此Connector支持非SSL请求和接收SSL请求,Catalina会自动将请求指向到此端口