文档章节

Tomcat多实例部署及其原理

jcc_codingBoy
 jcc_codingBoy
发布于 2016/04/11 21:19
字数 1336
阅读 557
收藏 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
博文 20
码字总数 14741
作品 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
713
1
求助:关于nginx 转发 双向SSL认证请求 的问题

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

malf
2014/02/21
1K
1
应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

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

yht_1990
2016/07/19
0
0
如何搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已...

Java大蜗牛
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
6
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部