文档章节

Tomcat多实例部署及其原理

jcc_codingBoy
 jcc_codingBoy
发布于 2016/04/11 21:19
字数 1336
阅读 530
收藏 21
点赞 1
评论 0

(一)  什么是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
博文 18
码字总数 14211
作品 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
应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

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

yht_1990
2016/07/19
0
0
应用服务器 Tcat Server 6 R2

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

红薯
2010/01/08
392
1
菜鸟学Linux 第102篇笔记 tomcat + JDK

菜鸟学Linux 第102篇笔记 tomcat + JDK 内容总览 Java体系 JDK (Java Development Kit) java SE, java EE Tomcat tomcat配置文件 tomcat 应用程序“部署” webapp体系结构 webapp的归档格式 ...

Winthcloud
2017/02/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
选择微服务部署策略

一、诱因 部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N)服务器(物理机或虚拟机),在每台服务器上运行若干个(M)应用实例。部署单体应用并不总是简单明了,但还是比...

银月光海
2016/07/27
12
0
构建一机多实例tomcat集群

1、了解tomcatTomcat不是一个完整意义上的Jave EE(j2ee)服务器,因为它没有提供完整的Java EE企业应用平台的API。但是由于Tomcat遵循apache开源协议,并且对当前Java开发框架开源组件Struc...

五大三粗
2014/07/12
0
0
关于 Nginx + Tomcat 配置中使用 proxy_pass 在处理 URL 上的说明

经常在讨论区有人提这样一些关于 Nginx 中使用 proxy_pass 模块与后端 Tomcat 之间配置的 URL 处理问题,我在这里把这些问题做一个总结。 在总结之前有一点必须说明:proxy 模块是没有 URL ...

红薯
2013/09/25
3.8K
5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python3学习日志二 Python中的集合set和字典dict

1.集合set 定义一个集合set 我们可以看到定义集合set有两种不同的形式,如果要定义一个空的集合set不能用{}而是要用set();另外,集合是无序的,而且set中的元素是不可重复的,如果你定义了一...

Mr_bullshit
4分钟前
0
0
adb 操作指令详解

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。...

孟飞阳
11分钟前
0
0
nodejs安装以及环境配置(很好的node安装和配置文章,少走很多弯路)

一、安装环境 1、本机系统:Windows 10 Pro(64位) 2、Node.js:v6.9.2LTS(64位) 二、安装Node.js步骤 1、下载对应你系统的Node.js版本:https://nodejs.org/en/download/ 2、选安装目录进...

sprouting
28分钟前
0
0
Redisson

了解了Redisson,发现使用挺简单的,接下来准备深入学习一下。 Redisson介绍 Redisson是架设于Redis基础之上的一个Java驻内存数据网格(In-Memory Data Grid) Redisson在基于NIO的Netty框架上...

to_ln
28分钟前
0
0
python有哪些好玩的应用实现,用python爬虫做一个二维码生成器

python爬虫不止可以批量下载数据,还可以有很多有趣的应用,之前也发过很多,比如天气预报实时查询、cmd版的实时翻译、快速浏览论坛热门帖等等,这些都可以算是爬虫的另一个应用方向! 今天给...

python玩家
29分钟前
0
0
jq 判断复选框是否被选中,复选框后台接收

1. 效果 2. 代码 html部分: JS部分: var rememberLogin = $("#rememberLoginId").is(':checked')//获取复选框是否被选中 var rememberLoginval = $("#rememberLoginId").attr('value')//拿......

Lucky_Me
36分钟前
0
0
python爬虫日志(3)-爬去异步加载网页

在浏览器检查元素页面中,选取Network中的XHR选项即可观察每次加载页面,网页发出的请求,观察url的规律即可利用封装的函数对每一页进行爬取。

茫羽行
36分钟前
0
0
《趣谈网络协议》之为什么要学习网络协议?

一、协议 1.协议的定义 简单说协议就是一个规则,保证沟通交流双方可以互相听懂、理解或者可以双方合作可以顺利进行的一个约定和规则。 2.生活中例子 (1)有一种叫“程序猿”的物种,敲着一种...

aibinxiao
38分钟前
1
0
Python数据分析numpy基础-维度的认识

什么是多维数组? 核心对象是同型的多维数组(简单理解就是一个表格,通常内容都是些数字),具有相同的数据类型。 概念: 1. axes(轴):数组的维度统称为轴。 2. rank:轴的数量称为rank。...

十年磨一剑3344
42分钟前
0
0
Java 正则表达式相关资料

1.java正则表达式过滤html标签

IT追寻者
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部