tomcat7集群配置BruceBob.doc
《tomcat7集群配置BruceBob.doc》由会员分享,可在线阅读,更多相关《tomcat7集群配置BruceBob.doc(19页珍藏版)》请在三一办公上搜索。
1、Tomcat7 集群配置Edited by Bruce Bob该文档翻译自tomcat 帮助文档,下面主要说的是session的复制机制。1:在server.xml中的 或者中添加下面内容通过上面的配置,可以实现使用DeltaManager来实现session的all-to-all的复制。所谓的all-to-all复制是一个节点的session将会被复制到所有的其他的节点其实这么做是效率很低的。这在小集群当中是相当有效的,但是当存在大集群的时候,也就是集群中有很多的tomcat节点的时候,我们不推荐这么做。当使用delta manager进行session复制的时候,即使节点中没有应用部署,s
2、ession也会被复制。避免这种情况的办法,你可以使用BackManager。该管理器只会将session复制到备份节点中。并且只会复制到部署应用的节点中。下面是几个重要的默认值:1:组播地址为 222.0.0.42:组播端口是 45564(端口和地址一起决定了集群成员节点)3:IP广播是.InetAddress.getLocalHost().getHostAddress4: 集群基本要在tomcat7中实现集群,需要实现以下步骤:u Session中的所有的属性都需要是可序列化的u 在你的server.xml中,注释掉Cluster节点u 如果你已经定义了集群值,确保在server.xml下
3、的cluster节点下的存在 ReplicationValve值u 如果你的tomcat多个实例运行在同一个机器上,确保 tcpListenPort 属性是不同的。通常,tomcat会智能检测在4000-4100之间的可用端口。u 如果你使用 mod_jk ,确保jvmRoute属性设置了 并且,jvmRoute 同你在 workers.properties中的 worker name是一致的。u 确保所有的机器的时间都是一致的。并且用NTP进行时间同步其实时间可以允许不大的差异u 确保你的 loadbalancer (负载均衡)配置了 sticky session模式如果采用session复
4、制,还需要sticky模式么?负载均衡可以通过很多的技术实现。注意:你的session是通过cookie 来进行关联的。所以,你的URL从外部看一定是一致的,否则,将会生成一个新的session。集群的配置需要jdk1.5或更高版本的支持。集群模块采用的是Tomcat的JULI日志框架。所以,你可以通过 logging.properties文件来配置日志。概述要在tomcat中实现 session的复制,可以通过三种不同的方式达到相同的效果。:u 使用session的持久化,并且将session存储在 共享文件系统中。u 使用session持久化,并将session存储到数据库中。u 使用内存
5、复制机制。使用简单的 tcp集群在发布的session复制方案中,tomcat使用DeltaManager 来实现 all-to-all的session复制或者使用BackupManager 将session复制到一个节点中。All-to-all复制算法只适用于小集群。对于大集群,采用主备session复制,这样,session只会复制到备用服务器中。当前,你使用 domain workerattribute(mod_jk1.2.8以上)来构建集群划分。这种构建方式可以解决潜在的系统构建的伸缩问题。为了确保网络通讯,你可以讲集群分成若干个组。他们可以通过不同的组播地址轻易的区分。这种结构简单来
6、说就是如下这种情况:DNS Round Robin | Load Balancer / Cluster1 Cluster2 / / Tomcat1 Tomcat2 Tomcat3 Tomcat4需要注意的是:session的复制只是集群开始。另一个实现集群的流行的概念是 farming。比如说,你在一个服务器上部署了应用,然后集群会把该应用分别部署在集群中的各个节点。这个能力可以通过 FarmWarDeployer 深入探究(server.xml中cluster的一种实现)。集群信息节点成员是通过组播的心跳来建立的。所以,如果你想拆分你的集群,你通过改变组播地址和端口来实现。心跳包括了ip地址
7、和tomcat监听的session复制的TCP端口。所有信息的交互都是通过tcp协议实现的。ReplicationValve 这个值用来找出 request是什么时候完成并开始session复制的。该值只有在session发生变化,也就是调用setAttribute或者调用removeAttribute方法时,才进行复制。一个性能最重要的考虑就是同步复制还是异步复制的问题。在同步复制中,request在session信息复制到其他的节点之后,才可用。是同步复制还是异步复制是通过 channelSendOptions( int 类型)来配置的。对于 SimpleTcpCluster/DeltaM
8、anager来说,默认值是8,他是异步的。具体配置你可以通过下面两个连接,获得更多信息。send flag(overview) or thesend flag(javadoc)在异步复制过程中,request在session同步完成之前就可用。异步可以缩短处理请求的时间。同步处理保证request返回前,session已经同步完成。节点崩溃后,绑定session如果你使用mod_jk 但是没有使用sticky session或者因为某些原因,sitcky没有起作用,或者你的tomcat崩溃了,session的id需要被修改因为他之前包含了worker 的ID,也就是之前tomcat的ID。为了
9、解决这个问题,我们使用 JvmRouteBinderValve。在一个tomcat节点崩溃后,JvmRoutrBinderValue重写session ID来确保下一个请求将会粘滞(也就是说不会回到随意的节点因为之前的节点已经不可用了)。该阀会用同样的值重写在cookie中的jessionID。如果没有配置该阀,使用mod_jk实现sticky可能就比较难了。默认的,如果没有阀被配置,那么JvmRouteBinderValve就会被加入。集群消息监听器(jvmRouteSessionIDBinderLinstener)也是被默认设置的,并且被用于一旦有节点崩溃,向其他节点重写sessionID
10、。注意,如果你在server.xml中实现自己的阀或者实现自己的监听器,那么默认的则会失效。所以确保你加入正确的阀和监听器。配置demo: !- - 下面将会对上面的配置文件进行详细的讲解:Cluster是主要的元素,在这个元素中,集群的配置的所有细节都在这里面。channelSendOpentions 是通过SimpleTcpCluster发送的消息的标示,或者任何调用SimpleTcpCluster.send方法的对象。这个标记的说明在http:/tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/tribes/Channel.
11、htmlDelatManager 是通过SimpleTcpCluster.send方法发送消息,而backup manager则是通过通道,他自己直接发送到的。 !- -这个是manager 配置的模板,如果在context元素中,没有manager配置的话,默认就用这个了。在tomcat5.x中,每一个app应用必须用同一个manager,但在该版本的tomcat中,你可以为每一个webapp定义manager。所以,你可以在你的集群中混合配置manager。很显然,每一个节点中的manager需要同集群中的其他的节点的manager是一致的。如果没有为webapp配置manager,并且w
12、ebapp被标记成,tomcat将会采用这个manager的配置并且生成一个manager的实例。关于manager的配置,参考下面链接:http:/localhost:8080/docs/config/cluster-manager.html这个channel元素是一个部落?,一个在tomcat中的组交流框架。该元素将所有和交流相关以及成员之间组织关系封装起来。详情参考:http:/localhost:8080/docs/config/cluster-channel.htmlmembership是通过组播完成的。注意如果你想扩展你的membership而超越组播,可以通过使用StaticMe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- tomcat7 集群 配置 BruceBob
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-2397242.html