Tomcat的组织结构及集群原理 李 山
Tomcat简介 Tomcat是一个基于组件的服务器,它的构成组件都是可以配置的。 Tomcat的各个组件是在$catalina_home/conf/server.xml文件中配置 我们看一下tomcat中的配置文件server.xml 介绍包括哪些容器
Tomcat简介——server.xml组织结构 大致的简略结构是这样的
Tomcat server配置图 Tomcat是一种自上而下,容器中又包含子容器的结构。
Tomcat简介——server.xml组织结构 一个元素代表一个组件 它是配置文件的最顶层元素,代表一个服务器。 一个配置文件中只能有一个元素 Server组件 Service组件 是一些Connector组件的集合 一个Service组件只能有一个Engine组件 Connector组件 表示一个接口 接收请求,发送给其他组件,响应请求
Tomcat简介——server.xml组织结构 上面介绍的3个组件本身并不能处理客户请求,也不能生成响应。 在tomcat中只有3个组件是可以处理客户请求并生成响应的,这3个组件是Engine、Host和Context. 这三个组件分别代表了不同的服务范围,通过嵌套关系知:Engine>Host>Context
Tomcat简介——server.xml组织结构 Engine组件下可以包含多个Host组件,它为特定的Service组件处理所有客户请求(一个Serveice组件只能包含一个Engine组件) Engine 容器类元素 Context组件代表一个Web应用 Host Context 一个Host组件代表一个虚拟主机,一个虚拟主机中可以包含多个Web应用
Tomcat 启动流程图 实际运行中经常遇到的问题 1.tomcat无法启动 2. 线层不足 cann’t create native thread 3. tomcat重命名问题
tomcat集群的工作原理 tomcat集群的实现,主要工作之一是session的复制。 在同一个集群里的tomcat实例对每个用户都保存完全同步的会话信息,这样,当其中一个tomcat实例由于某种原因不能提供服务时,可以由其他tomcat实例来代替它的工作
tomcat集群的工作原理 tomcat实现session复制有三种方法 01 02 03 使用session持续化,把session信息保存到一个共享的系统文件里(持续化管理器+文件存储) 使用session持续化,把session信息保存到一个共享的数据库里(持续化管理器+JDBC存储) 使用内存复制,用tomcat 5 自带的SimpleTcpCluster类实现(server\lib\catalina-cluster.jar)
tomcat集群的工作原理 SimpleTcpCluster 集群类。channelSendOptions默认值为8(异步的方式),这个标识确定通过SimpleTcpCluste如何发送消息。 Manager用来在Tomcat节点之前复制Session,当前有两个实现类,分别为:org.apache.catalina.ha.session.DeltaManagert和org.apache.catalina.ha.session.BackupManager。DeltaManager调用SimpleTcpCluster.send方法来发送信息,复制并发送Session到集群下所有的节点,不管这个节点有没有部署当前程序。 channel管理一组子组件,并和它们一起组成了tomcat实例间的通讯框架。
Membership 会自动检索和发现新节点和已经停止的节点,并发出相应的通知
Receiver负责监听其他节点传过来的数据 Sender组件管理从一个节点发送到另外一个节点的出站连接和数据信息,允许信息并行发送。
tomcat集群的工作原理 219.142.121.10 这个服务器上配置了三个tomcat ,分别为 apache-tomcat-lc1 apache-tomcat-lc2 apache-tomcat-lc3 这三个配置文件唯一不同的是 会话复制请求的监听端口 TCP监听端口就是从其他 成员接收 复制过来的会话 数据的端口
tomcat集群的工作原理 集群成员关系是通过所有的Tomcat实例都向相同的IP地址及端口发送消息来建立的。 所以apache-tomcat-lc1 apache-tomcat-lc2 apache-tomcat-lc3 中membership属性配置都相同
谢谢~