文档章节

Tomcat多实例部署及其原理

jcc_codingBoy
 jcc_codingBoy
发布于 2016/04/11 21:19
字数 1336
阅读 580
收藏 23

(一)  什么是tomcat多实例部署?

tomcat多实例部署指的是只需要安装一个tomcat服务器软件同时可部署多个应用实例的场景,这样做的好处是:

  1. 不需要到处拷贝tomcat软件,减少磁盘空间占用;

  2. 当需要升级tomcat版本时,不需要一个个升级,浪费运维成本,只需要在一个地方升级就可以了;

那为什么tomcat能够支持多实例部署?这个需要从tomcat本身的架构来解释。


(二)  tomcat架构

1.整体架构图

2.Container容器子容器间关系图

3.交互图

4.tomcat组件间关系图

组件说明:

  1. Container容器包含4个子容器,EngineHoseContextWrapper

  2. 4个子容器是父子关系,但不是通过继承实现,而是通过组合设置父级容器实现的;

  3. Engine对应Server.xml中的Engine节点、Host对应Server.xml中的Host节点、Context对应Server.xml中的Context节点(或独立的Context.xml文件中);

  4. 一个Host标识一个虚拟主机,可以包含由多个Context代表的web应用;

  5. 每一个Context代表一个web应用;

  6. Wrapper用于包装Servlet;

(三)Tomcat配置文件与组件关系映射:

知道组件之间的关系,再来看看XML配置文件与组件之间的对应关系就好办多了

  1. Server.xml文件

    <Server port="8005" shutdown="SHUTDOWN">

        <Service name="Catalina">

            <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

           <Engine defaultHost="localhost" name="Catalina">

                <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">

                     <Context docBase="strutsdemo" path="/strutsdemo" reloadable="true" source="org.eclipse.jst.j2ee.server:strutsdemo"/>

                </Host>

          </Engine>

    </Service>

    </Server>

    元素与组件对应关系:

    Server——Server服务器,代表整个servlet容器,整个配置文件只能有一个,通过配置的端口来控制服务器,整个系统端口不能冲突;

    Service ——Service 服务,可以存在多个,但name属性值必须唯一,可以接受多个Connector,但只能映射一个Engine;

    Connector ——Connector 组件,负责接收管理客户端的连接,不同类型处理不同的连接类型;

    Engine ——Engine 容器,接收和处理该Service下所有Connector的请求,defaultHost属性值必须与某个Host子元素的name属性值相等;

    Host ——Host 容器,代表一个虚拟主机,用于与外界沟通,可以通过alias别名方式映射多个DNS(域名),即多个域名映射同一个主机,其中appBase属性值是加载应用的跟路径,本身相对于CATALINA_BASE;

    Context ——Context 容器,代表一个web应用,可以直接配置在Host元素下面,也可以单独配置在独立路径下面,这个是根据Tomcat对配置文件加载方式和顺序决定的,一个Host下可以配置多个Context;


  2. tomcat加载应用顺序

    1)tomcat启动是,由Host加载应用,顺序如下:

        a.加载[engine.name]/[host.name]/XXXX-web.xml,其中engine.name是Server.xml中Engine元素的name属性值,honst.name是Host元素的name属性值,XXXX-web.xml代表一个应用的Context元素,

         XXXX-web.xml只能配置一个Context元素,且如果Context元素的path属性是空或/跟路径,则可以将文件命名为ROOT.xml;

        b.加载Host元素appBase对应目录下的war工程,默认情况下appBase的值是webapps,表示加载该目录下的工程;

            c.当Host的appBase目录存在多级目录工程时,进一步加载;

      2)Context文件配置时,docBase可配置绝对路径,也可配置相对路径(相对于HostappBase),当path属性值是多级目录时,如:/foor/bar,则该独立文件应该被命名为:foor#bar.xml,由#代替/命名文件;

  3)修改Engine的name或Host的name则启动是可以看到文件路径发生了改变;

(四)关于CATALINA_HOME和CATALINA_BASE的关系

  Tomcat6.0为例,其Tomcat 录结构如下:

     bin (运行脚本)、conf (配置文件)、 lib (核心库文件) 、logs (日志目录)、 temp (临时目录) 、 webapps (自动装载的应用程序的目录)、 work (JVM临时文件目录[java.io.tmpdir])

  其中只有 bin  lib 目录在多实例部署时被多个tomcat实例公用,其它目录conflogstempwebappswork 每个Tomcat实例必须拥有其自己独立的备份

 所以:

      catalina.home(安装目录):指向公用信息的位置,就是binlib的父目录。

      catalina.base(工作目录):指向每个Tomcat目录私有信息的位置,就是conflogstempwebappswork的父目录。

(五)多实例部署
     在知道了tomcat的架构原理之后就可以部署多实例了,顺序如下

    1.安装tomcat软件,路径如下:/usr/local/apache-tomcat-6.0.18

    2.拷贝tomcat软件到新的路径目录[/home/test]下作为新实例使用,需要删除其中的bin/lib子目录(公用的不需要),同时在当前目录[/home/test]的conf/Catalina/localhost/xxx-web.xml文件中配置context元素,指向应用所在目录,一般使用绝对路径配置docBase;

    3.在当前实例目录下新建一个启动脚本start.sh,设置catalina.home指向/usr/local/apache-tomcat-6.0.18,catalina.base指向当前实例目录[/home/test],启动命令执行/usr/local/apache-tomcat-6.0.18/bin下的启动脚本即可;

    4.停止脚本原理同启动脚本stop.sh;

  至此,多实例部署已经完成!!!

© 著作权归作者所有

共有 人打赏支持
jcc_codingBoy
粉丝 0
博文 23
码字总数 15914
作品 0
成都
程序员
私信 提问
Java应用服务器--Tcat Server

Tcat Server 是由MuleSoft(前身是MuleSource)所创建的一个基于Apache Tomcat的应用服务器。Tomcat的轻量、简单以及其部署广泛都是选择它作为Tcat Server基础的主要原因。 Tcat Server初始版...

匿名
2009/10/15
1K
0
Tcat Server 6.0 RC3 发布,紧跟Tomcat 7

Tcat Server 是由MuleSoft(前身是MuleSource)所创建的一个基于Apache Tomcat的应用服务器。Tomcat的轻量、简单以及其部署广泛都是选择它作为Tcat Server基础的主要原因。Tcat Server初始版...

红薯
2010/07/13
715
1
应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

应用软件学习总结 目录 版本控制系统 SVN部署及使用 Git从入门到熟悉 监控系统 一健安装Zabbix 自动化运维工具 Ansible自动化运维工具安装及使用 VPN专线 PPTP服务器端部署到客户端连接使用 ...

yht_1990
2016/07/19
0
0
求助:关于nginx 转发 双向SSL认证请求 的问题

大家好,对Web 部署方面不太了解,请教些问题: 我想在互联网上对外提供Web服务,现在申请有一个公网固定IP,想通过代理的方式,接受浏览器发过来的请求(基于虚拟域名和默认80端口),通过n...

malf
2014/02/21
1K
1
121 项目 012 笔记向 tomcat 部署项目

最简单的部署 直接把 war 文件复制到 webapps 目录下 配置server.xml 这种修改原有配置的方案我一般是不会用的 具体操作: 其中,docBase为设置项目的路径。 新建 context .在conf目录中,在...

小代码2016
2016/09/29
34
0

没有更多内容

加载失败,请刷新页面

加载更多

解析JQuery中each方法的使用

each() 方法规定为每个匹配元素规定运行的函数。写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 概述: each() 方法规定为每个匹配...

前端攻城小牛
4分钟前
0
0
深入解析Vue开发动态刷新Echarts组件的教程

需求背景:dashboard作为目前企业中后台产品的“门面”,如何更加实时、高效、炫酷的对统计数据进行展示,是值得前端开发工程师和UI设计师共同思考的一个问题。今天就从0开始,封装一个动态渲...

peakedness丶
17分钟前
2
0
memcached

memcached 为了避免内存碎片化(传统的内存管理方式是,使用完通过malloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率),采用了 slab allocatio...

Cobbage
17分钟前
2
0
keepalived的介绍及配置高可用集群

12月19日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 集群介绍 根据功能划分为2类:高可用和负载均衡 高可用集群:通常为两台服务器,一台工作,另外...

robertt15
18分钟前
5
0
WiFi攻击的三种方式

导读 WiFi的安全问题已经引起了不少的使用者重视,甚至已经出现草木皆兵的现象。那么黑客到底是如何做到绕过身份验证来获取WiFi使用权的呢?主要有以下三种方式,其中最后一种方式十分简单。 ...

问题终结者
32分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部