Linux系统下Tomcat多实例安装及配置说明

来源:互联网 发布:plc编程梯形图简单实例 编辑:程序博客网 时间:2024/06/06 00:43

Linux系统下Tomcat多实例安装及配置说明

概述

Tomcat不是一个完整意义上的Jave EE(j2ee)服务器,因为它没有提供完整的Java EE企业应用平台的API。但是由于Tomcat遵循apache开源协议,并且对当前Java开发框架开源组件Structs、Spring和 Hibernate等实现完美支持,因此tomcat被众多企业用来部署配置众多的Java应用程序,实现替代一些商业的Java应用服务器。

Tomcat架构

Tomcat架构
- Server 即tomcat本身,web应用程序服务器的一个实例
Service 将容器(通常为Engine)与一组连接器编成组。 每个service代表一组连接器(管理客户端和服务器之间的连接组件)和单个容器,该容器从各连接器接收请求并处理这些请求,将它们发给适当的主机器。
- Connector 管理客户端和服务器之间的连接组件,默认连接器Coyote,还有一个AJP连接器
- Engine 只有一个
- Real 域为Engine管理用户验证和授权。在配置应用程序过程中,管理员会设置给定了的资源或者一组资源角色,而这个策略是由域来实现的
- Valve 阀门是支持Tomcat拦截请求并对其进行预处理的组件。 Host和Engine都可以有Valve
- Host 模仿Apache的虚拟主机,在tomcat中, 虚拟主机之间通过完全限制主机名进行区分。

多实例的由来

生产环境中,将两个应用放在一个tomcat里,如果我们想要对其中一个应用程序的配置做一些修改,那么就必须重新启动tomcat,那样势必就会影响到另外应用程序的正常服务,另外,如果其中一个应用崩溃会导致另一个正常应用停止服务,因为它们是运行在同一个JVM上的。 所以将单个应用部署到单个tomcat里面是比较妥当的,tomcat里的应用不会互相影响,而且两个tomcat程序也可以分别升级。但是如果我们希望两个web应用分别运行在不同的JVM上,且使用的tomcat版本又必须一致,这种方法就稍显麻烦,因为如果要升级tomcat版本就必须同时升级两个。tomcat在一个程序版本上运行多个实例就能解决这种问题。
如图所示:
Tomcat多实例布局
CATALINA_HOME是Tomcat的安装目录,CATALINA_BASE是Tomcat的工作目录。如果我们想要运行Tomcat的 多个实例,但是不想安装多个Tomcat软件副本。那么我们可以配置多个工作 目录,每个运行实例独占一个工作目录,但是共享同一个安装目录。Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,因此CATALINA_BASE就 指向这些目录。 而其他目录主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。

示例:
CATALINA_BASE = /opt/tomcat-ins
CATALINA_HOME = /usr/local/apache-tomcat
WEBAPP_DIR = /var/www/tomcat-ins-webapp

安装

基础

  • jdk
    编译之前要确定系统中是否设置好 JAVA_HOME环境变量。或者在编译配置中指定jdk的路径。

    echo ${JAVA_HOME}
    系统响应:/usr/local/jdk/jdk1.x.0_xx

  • openssl与openssl-devel

    yum install openssl openssl-devel
    sudo apt-get install openssl libssl-dev

  • 以某个系统用户来运行工作进程

    useradd -U -M -s /usr/sbin/nologin www

  • 解压tomcat安装包
    tar -zxvf apache-tomcat-x.x.xx.tar.gz -C ${CATALINA_HOME}

安装JSVC

startup.sh可以简单的启动,但无法指定启动Tomcat服务的用户,会导致Tomcat已超级用户运行,存在安全隐患,另一个就是系统关闭的时候无法自动停止Tomcat 实例。
在Linux下,Tomcat可以作为一个守护进程来启动以及停止,这个必须借助于项目commons-daemon中的jsvc工具。 daemon.sh就是这个工具的启动脚本.
JSVC可以让tomcat以LINUX守护进程来运行,是apache的daemon项目下的开源项目,主要功能可以使一些运行在普通用户下的java进程获取一些root权限下的权利,比如监听1024以下的端口(Linux普通用户运行的程序是不能监听1024以下的端口)。 可以更精细的控制tomcat的运行方式,如指定 tomcat 运行用户和组,指定 jvm 的运行参数例如内存控制,语言,字符编码。还可以指定 tomcat 启动时的 pidfile。 官方介绍如此:Jsvc is a set of libraries and applications for making Java applications run on UNIX more easily. Jsvc allows the application (e.g. Tomcat) to perform some privileged operations as root (e.g. bind to a port < 1024), and then switch identity to a non-privileged user.

# 从tomcat中解压源码tar -zxvf $CATALINA_HOME/bin/commons-daemon-native.tar.gz -C /var/tmp/cd /var/tmp/commons-daemon-1.0.15-native-src/unix/# 编译 ./configure --with-java=${JAVA_HOME} make # 将编译后的内容复制到tomcat中 cp ./jsvc $CATALINA_HOME/bin # 添加配置 vi $CATALINA_HOME/bin/setenv.sh # jsvc JSVC_OPTS="-jvm server"

安装APR

Apache portable Run-time libraries,Apache可移植运行库 。为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期 的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。 应用程序基于APR来开发,就不在需要考虑具体的平台,不管是Unix、Linux还是Window,应用程序执行的接口基本都是统一一致的。 apache 的apr项目目前有三部分组成,分别是apr、apr-util、apr-iconv。
apr中包含了一些通用的开发组件,包括mmap,DSO等等
apr-util该目录中也是包含了一些常用的开发组件。这些组件与apr目录下的相比,它们与apache的关系更加密切一些。比如存储段和存储段组,加密等等。
tomcat 启用arp,则启动日志中有类似信息:INFO: Loaded APR based Apache Tomcat Native library
Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
Starting ProtocolHandler [“http-bio-8080”]
Starting ProtocolHandler [“http-nio-8080”]
Starting ProtocolHandler [“http-apr-8080”]
APR源码包需要单独下载

tar -zxvf apr-1.5.2.tar.gz -C /var/tmpcd /var/tmp/apr-1.5.2./configure --prefix=$CATALINA_HOME/aprmake && make install

安装Native

Apache Tomcat 可选的组件,其利用 APR 来提升Tomcat性能,使用 Apache 的 apr 包来处理包括文件和网络IO操作

tar -zxvf $CATALINA_HOME/bin/tomcat-native.tar.gz -C /var/tmpcd /var/tmp/tomcat-native-1.1.33-src/jni/native/./configure --with-apr=$CATALINA_HOME/apr/ \            --with-java-home=${JAVA_HOME}/ \            --with-ssl=yes \            --prefix=$CATALINA_HOMEmake && make install# 追加配置vi $CATALINA_HOME/bin/setenv.sh# Native库路径LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib:$CATALINA_HOME/apr/libexport LD_LIBRARY_PATHLD_RUN_PATH=$LD_RUN_PATH:$CATALINA_HOME/lib:$CATALINA_HOME/apr/libexport LD_RUN_PATHexport JAVA_OPTS="-server -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"

-server 一定要作为第一个参数,启用JDK的server版本,在多个CPU时性能佳。
还可以配置 -Xms设置初始Java堆大小与 -Xmx设置最大Java堆大小

新增实例

创建实例目录

   # 每个化身可以独立干事   make /var/www/ins-webapp /opt/tomcat-ins   chown -R www:www /var/www/ins-webapp   chown -R www:www /opt/tomcat-ins   cd $CATALINA_HOME   mv -t $CATALINA_BASE temp conf   # 有了化身,本尊下面的这几个目录就没用武之地了,这里就把它们剔除了。   rm -rf logs webapps work

服务

本尊与化身是有着很多的联系,这些联系就是通过如下配置实现的,在实例目录下,新增配置文件:
vi $CATALINA_BASE/.service
该文件内容根据操作系统init程序的不同,添加如下内容:
- sysV或UpStart

   #!/bin/sh   # chkconfig: 235 90 90   # description: Starts and Stops the Tomcat  daemon.   export JAVA_HOME=$JAVA_HOME   export CATALINA_HOME=$CATALINA_HOME   export CATALINA_BASE=$CATALINA_BASE   export CATALINA_PID=/var/run/tomcat-ins.pid   export TOMCAT_USER=www   `$CATALINA_HOME/bin/daemon.sh $1`
  • systemd
[Unit]Description=Tomcat ins.After=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]Type=forkingEnvironment=JAVA_HOME=${JAVA_HOME}Environment=CATALINA_HOME=${CATALINA_HOME}Environment=CATALINA_BASE=${CATALINA_BASE}Environment=CATALINA_PID=/var/run/tomcat-ins.pid#Environment=CATALINA_OUT=${CATALINA_BASE}/logs/console.outEnvironment=TOMCAT_USER=wwwPermissionsStartOnly=trueExecStart=${CATALINA_HOME}/bin/daemon.sh startExecStop=${CATALINA_HOME}/bin/daemon.sh stop#TimeoutSec=600#Restart=alwaysPrivateTmp=falseRemainAfterExit=yes

配置好服务文件权限

chown root:root  $CATALINA_BASE/.servicechmod +x  $CATALINA_BASE/.service

将文件添加到系统服务
- sysV

   ln -s $CATALINA_BASE/.service /etc/init.d/tomcat-ins
  • systemd
   ln -s $CATALINA_BASE/.service /etc/systemd/system/tomcat-ins

开机自启动服务

  • sysV
  chkconfig --levels 235 tomcat-ins on  chkconfig --list tomcat-ins
  • systemd
  systemctl enables tomcat-ins

实例配置

$CATALINA_BASE目录下的文件说明:

  • catalina.policy
    包含由java Security Manager 实现的安全策略声明.它替换了安装java时带有的java.policy文件.这个文件用来防止欺骗代码或JSPs执行带有像System.exit(0)这样的命令的可能影响容器的破坏性代码。只有当Tomcat用-security命令行参数启动时这个文件才会被使用。
  • catalina.properties
    包含不能被像 java.* 或 org.apache.tomcat.* 这样的servlets或jsps中的可执行java代码覆盖的java包的列表,这种覆盖可能成为安全隐患.还支持查找通用jars的设置。
  • context.xml
    这个通用context.xml可被所有的web应用程序使用.这个文件默认地可以设置到何处访问各web应用程序中的web.xml文件。
  • logging.properties
    JULI记录器使用默认日志配置。它默认地使用ConsoleHandler和fileHandler设置应用程序 或者程序包的日志级别。
  • sever.xml
    tomcat的主要配置文件。解析器用这个文件在启动时根据规范”创建”容器。
  • tomcat-users.xml
    用于访问tomcat管理应用程序时的安全性设置。用server.xml中引用的默认的用户数据库域(UserDatabase Realm)使用它。所有的凭据都是默认被注释的。
  • web.xml
    默认的web.xml文件可被所有web应用程序使用。这个web.xml文件会设置jspservlet以支持应用程序处理jsps。并设置一个默认的sevlet来处理静态资源和html文件.它还设置默认的会话超时以及像index.jsp, index.html这样的欢迎文件;并且它为最通用的扩展文件设置默认的MIME类型。
    当应用程序被部署到tomcat服务器时, 它会用[enginename]/[host name]/[context path name].xml创建与context.xml等效的文件.如用户也在上面提到的目录创建 一个context.xml.default文件, 在这个文件中特定主机下的所有web应用程序将对主机器虚拟环境采用一系列默认设置。

Connector 支持三种运行模式

Tomcat Connector IO的读写操作方式有同步阻塞 同步非阻塞 异步阻塞 异步非阻塞几种。
- BIO :一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。
- NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。
- APR:从操作系统层面解决io阻塞问题。

Linux如果安装了apr和native,Tomcat直接启动就支持apr,否则,默认为BIO模式。

  vi  $CATALINA_BASE/conf/server.xml  <Server port="-1" shutdown="SHUTDOWN">  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />  <Connector port="80" protocol="org.apache.coyote.http11.Http11AprProtocol"                redirectPort="8443"                URIEncoding="UTF-8"                compression="on"                compressableMimeType="text/html,text/css,text/javascript" />

验证

  • sysV
  service tomcat-ins version
  • systemd
  systemctl start tomcat-ins
原创粉丝点击