Tomcat多实例部署及其原理

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

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

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

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

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


(二)  tomcat架构

1.整体架构图

201645_pK2t_1159254.gif

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

201819_wZEf_1159254.jpg

3.交互图

201930_KLvC_1159254.jpg

4.tomcat组件间关系图

201931_ovUW_1159254.jpg

组件说明:

  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;

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

转载于:https://my.oschina.net/u/1159254/blog/656990

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值