当前位置:文档之家› Tomcat集群Cluster实现原理剖析

Tomcat集群Cluster实现原理剖析

Tomcat集群Cluster实现原理剖析
Tomcat集群Cluster实现原理剖析

Tomcat集群Cluster实现原理剖析

博客分类:

服务器集群

tomcat集群

在上一篇文章中简要介绍了如何通过简单的配置来实现tomcat集群,本文意在介绍对tomcat集群进行更深入详细的配置以满足特定需求。

对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。

要实现这一点,大体上有两种方式,

一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据;

另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据。

两种方式都各有优点,

第一种方式简单、易于实现,但是存在着Session服务器发生故障会导致全系统不能正常工作的风险;

第二种方式可靠性更高,任一节点的故障不会对整个系统对客户访问的响应产生影响,但是技术实现上更复杂一些。

常见的平台或中间件如microsoft https://www.doczj.com/doc/5416178621.html,和IBM WAS都会提供对两种共享方式的支持,tomcat也是这样,但是一般采用第二种方式。

当采用tomcat默认集群配置(

className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>)时,配置的细节实际上被省略了,

对于大多数应用而言,使用默认配置已经足够,完整的默认配置应该是这样:

className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendO ptions="8">

className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>

className="org.apache.catalina.tribes.group.GroupChannel">

className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout="5000"

maxThreads="6"/>

className="org.apache.catalina.tribes.transport.ReplicationTransmitte r">

className="org.apache.catalina.tribes.transport.nio.PooledParallelSen der"/>

className="org.apache.catalina.tribes.group.interceptors.TcpFailureDe tector"/>

className="org.apache.catalina.tribes.group.interceptors.MessageDispa tch15Interceptor"/>

className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>

className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderList ener"/>

className="org.apache.catalina.ha.session.ClusterSessionListener"/>

下面笔者对这里的配置项作详细解释,以下内容均是笔者阅读了tomcat 官方文档后自己的理解,有些可能不对,希望读者能带着批判的眼光阅读,并欢迎指正笔者错误。

tomcat集群各节点通过建立tcp链接来完成Session的拷贝,拷贝有同步和异步两种模式。

在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;

异步模式无需等待Session拷贝完成就可响应。

异步模式更高效,但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。

在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。

Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,

即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。

当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。

但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。

Channel负责对tomcat集群的IO层进行配置。Membership用于发现集群中的其他节点,

这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见https://www.doczj.com/doc/5416178621.html,/admin/blogs/296501),

使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。

Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat 会从4000-4100间依次选取一个可用的端口进行接收,

自定义配置时,如果多个tomcat节点在一台物理服务器上注意要使用不同的端口。

Sender用于向其他节点发送数据,具体实现通过Transport配置,

PooledParallelSender是从tcp连接池中获取连接,可以实现并行发送,即集群中的多个节点可以同时向其他所有节点发送数据而互不影响。

Interceptor有点类似下面将要解释的Valve,起到一个阀门的作用,在数据到达目的节点前进行检测或其他操作,如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。

关于Channel的编程模型,请参见

https://www.doczj.com/doc/5416178621.html,/tomcat-6.0-doc/api/org/apache/catalina/tribe s/Channel.html。

Valve用于在节点向客户端响应前进行检测或进行某些操作,

ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,

因此不需检测,默认状态下不进行过滤,监测所有的响应。

JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点,

tomcat官方文档并未解释如何实现这一点,而且笔者认为这一设置似乎并无多大实用性。

Deployer用于集群的farm功能,监控应用中文件的更新,以保证集群中所有节点应用的一致性,

如某个用户上传文件到集群中某个节点的应用程序目录下,Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。

这是一个相当强大的功能,不过很遗憾,tomcat集群目前并不能做到这一点,开发人员正在努力实现它,这里的配置只是预留了一个接口。

Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能。

在大体了解了tomcat集群实现模型后,就可以对集群作出更优化的配置了,

tomcat推荐了一套配置,使用了比DeltaManager更高效的BackupManager,并且对ReplicationValve设置了请求过滤,

注意在一台服务器部署多个节点时需要修改Receiver的侦听端口,另外,为了更高效的在节点间拷贝数据,所有tomcat节点最好采用相同的配置,

具体配置如下:

className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendO ptions="6">

className="org.apache.catalina.ha.session.BackupManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"

mapSendOptions="6"/>

className="org.apache.catalina.tribes.group.GroupChannel">

className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="auto"

port="5000"

selectorTimeout="100"

maxThreads="6"/>

className="org.apache.catalina.tribes.transport.ReplicationTransmitte r">

className="org.apache.catalina.tribes.transport.nio.PooledParallelSen der"/>

className="org.apache.catalina.tribes.group.interceptors.TcpFailureDe tector"/>

className="org.apache.catalina.tribes.group.interceptors.MessageDispa tch15Interceptor"/>

className="org.apache.catalina.tribes.group.interceptors.ThroughputIn terceptor"/>

className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.h tml;.*\.css;.*\.txt;"/>

className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

className="org.apache.catalina.ha.session.ClusterSessionListener"/>

Tomcat集群除了可以进行Session数据的拷贝,还可进行Context属性的拷贝,通过修改context.xml的Context配置可以实现,

使用

className="org.apache.catalina.ha.context.ReplicatedContext"/>替换默

认Context即可,当然也可再加上distributable="true"属性。

下面通过假想的一组场景来描述tomcat集群如何工作,集群采用默认配置,由t1和t2两个tomcat例程组成,场景按照时间顺序排列。

1. t1启动

t1按照标准的tomcat启动,当Host对象被创建时,一个Cluster对象(默认配置下是SimpleTcpCluster)也同时被关联到这个Host对象。

当某个应用在web.xml中设置了distributable时,Tomcat将为此应用的

上下文环境创建一个DeltaManager。

SimpleTcpCluster启动membership服务和Replication服务(用于建立tcp 连接)。

2. t2启动(待t1启动完成后)

首先t2会执行和t1一样的操作,然后SimpleTcpCluster会建立一个由

t1和t2组成的membership。

接着t2向集群中已启动的服务器即t1请求Session数据,如果t1没有响应t2的拷贝请求,t2会在60秒后time out。

在Session数据拷贝完成之前t2不会接收客户端的http或mod_jk/ajp请求。

3. t1接收http请求,创建Session s1

t1正常响应客户请求,但是在t1把结果发送回客户端时,ReplicationValve会拦截当前请求(如果filter中配置了不需拦截的请求类型,这一步就不会进行,默认配置下拦截所有请求),

如果发现当前请求更新了Session,调用Replication服务建立tcp连接把Session拷贝到membership列表中的其他节点即t2,

返回结果给客户端(注意,如果采用同步拷贝,必须等拷贝完成后才会返回结果,异步拷贝在数据发送到tcp连接就返回结果,不等待拷贝完成)。

在拷贝时,所有保存在当前Session中的可序列化的对象都会被拷贝,而不仅仅是发生更新的部分。

4. t1崩溃

当t1崩溃时,t2会被告知t1已从集群中退出,然后t2就会把t1从自己的membership列表中删除,

发生在t2的Session更新不再往t1拷贝,同时负载均衡器会把后续的http 请求全部转发给t2。

在此过程中所有的Session数据不会丢失。

5. t2接收s1的请求

t2正常响应s1的请求,因为t2保存着s1的所有数据。

6. t1重新启动

按步骤1、2一样的操作启动,加入集群,从t2拷贝所有Session数据,拷贝完成后开放自己的http和mod_jk/ajp端口接收请求。

7. t1接收请求,s1失效

t1继续接收来自s1的请求,把s1设置为过期。

这里的过期并非因为s1处于非活动状态超过设置的时间,而是执行类似注销的操作而引起的Session失效。

这时t1并非发送s1的所有数据而是一个类似s1 expired的消息,t2收到消息后也会把s1设为过期。

8. t2接收请求,创建Session s2

和步骤3一样。

9. t1 s2过期

对于因超时引起的Session失效t1无需通知t2,因为t2同样知道s2已经超时。

因此对于tomcat集群有一点非常重要,所有节点的操作系统时间必须一致!

不然会出现某个节点Session已过期而在另一节点此Session仍处于活动状态的现象。

因为tomcat的session同步功能需要用到组播,

windows默认情况下是开通组播服务的,

但是linux默认情况下并没有开通,

可以通过指令打开route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,

如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入

eht0 net 224.0.0.0 netmask 240.0.0.0。

原文:

https://www.doczj.com/doc/5416178621.html,/blog/static/1007689142011823939133 05/

tomcat集群

用apache和tomcat搭建集群,实现负载均衡 一、集群和负载均衡的概念 (一)集群的概念 集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据。除了作为单一系统提供服务,集群系统还具有恢复服务器级故障的能力。集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并通过系统级的冗余提供固有的可靠性和可用性。 (二)集群的分类 1、高性能计算科学集群: 以解决复杂的科学计算问题为目的的IA集群系统。是并行计算的基础,它可以不使用专门的由十至上万个独立处理器组成的并行超级计算机,而是采用通过高速连接来链接的一组1/2/4 CPU的IA服务器,并且在公共消息传递层上进行通信以运行并行应用程序。这样的计算集群,其处理能力与真正超级并行机相等,并且具有优良的性价比。 2、负载均衡集群: 负载均衡集群为企业需求提供更实用的系统。该系统使各节点的负载流量可以在服务器集群中尽可能平均合理地分摊处理。该负载需要均衡计算的应用程序处理端口负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也如此。通常,网络服务器应用程序接受了大量入网流量,无法迅速处理,这就需要将流量发送给在其它节点。负载均衡算法还可以根据每个节点不同的可用资源或网络的特殊环境来进行优化。 3、高可用性集群: 为保证集群整体服务的高可用,考虑计算硬件和软件的容错性。如果高可用性群集中的某个节点发生了故障,那么将由另外的节点代替它。整个系统环境对于用户是一致的。 实际应用的集群系统中,这三种基本类型经常会发生混合与交杂。 (三)典型集群 科学计算集群: 1、Beowulf 当谈到Linux 集群时,许多人的第一反映是Beowulf。那是最著名的Linux科学软件集群系统。实际上,它是一组适用于在Linux 内核上运行的公共软件包的通称。其中包括流行的软件消息传递API,如“消息传送接口”(MPI) 或“并行虚拟机”(PVM),对Linux 内核的修改,以允许结合几个以太网接口、高性能网络驱动器,对虚拟内存管理器的更改,以及分布式进程间通信(DIPC) 服务。公共全局进程标识空间允许使用DIPC 机制从任何节点访问任何进程。 2、MOSIX Beowulf类似于给系统安装的一个支持集群的外挂软件,提供了应用级的集群能力。而MOSIX 是彻底修改Linux的内核,从系统级提供了集群能力,它对应用而言是完全透明的,原有的应用程序,可以不经改动,就能正常运行在MOSIX系统之上。集群中的任何节点都可以自由地加入和移除,来接替其它节点的工作,或是扩充系统。MOSIX 使用自适应进程负载均衡和内存引导算法使整体性能最大化。应用程序进程可以在节点之间实现迁移,以利用最好

Tomcat集群与负载均衡

Tomcat集群与负载均衡(转载) 在单一的服务器上执行WEB应用程序有一些重大的问题,当网站成功建成并开始接受大量请求时,单一服务器终究无法满足需要处理的负荷量,所以就有点显得有点力不从心了。另外一个常见的问题是会产生单点故障,如果该服务器坏掉,那么网站就立刻无法运作了。不论是因为要有较佳的扩充性还是容错能力,我们都会想在一台以上的服务器计算机上执行WEB应用程序。所以,这时候我们就需要用到集群这一门技术了。 在进入集群系统架构探讨之前,先定义一些专门术语: 1. 集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。 2. 负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。如一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务。 3. 特点:在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。集群系统(Cluster)主要解决下面几个问题: 高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。 高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。 负载平衡:即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。 目前比较常用的负载均衡技术主要有: 1. 基于DNS的负载均衡 通过DNS服务中的随机名字解析来实现负载均衡,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,他们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。 2. 反向代理负载均衡(如Apache+JK2+Tomcat这种组合) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。 3. 基于NAT(Network Address Translation)的负载均衡技术(如Linux Virtual Server,简称LVS)

多台服务器tomcat集群

多台服务器tomcat集群 集群背景介绍 1.1 术语定义 服务软体是b/s或c/s结构的s部分,是为b或c提供服务的服务性软件系统。服务硬体指提供计算服务的硬件、比如pc机、pc服务器。服务实体通指服务软体和服务硬体。客户端指接受服务实体服务的软件或硬件。 1.2 两大关键特性 集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性: 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增

强了应用的可用性。 1.3 两大能力 为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。 1.4 两大技术 实现集群务必要有以下两大技术: 集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均

FineReport关于tomcat集群部署的方案

FineReport关于tomcat集群部署的方案

多台服务器集群后,配置权限、数据连接、模板、定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器。 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件、finedb/logdb 数据(定时任务、报表目录管理、批量导入、统计信息)的修改都对主机生效。其他辅机的信息读取也都从主机读取,保证了数据同步。 实现了灾备,即主机当即后,次主机会上位接替主机的工作,保证系统正常运作。 同时还增加了集群灾备之文件同步,会将主机的finedb、xml、模板、jar包、插件等等备份到其他节点的应用上。支持可以手动同步和自动同步。 插件介绍 设计器插件、服务器插件安装好之后,新集群部署,有主机、次主机、辅机之分,配置文件都从主机读取,辅机只能用作计算引擎分担压力,有点事当改配置文件的时候,不需要每个节点都去修改,直接改主机即可。 分布式集群 分布式集群文件系统:每台计算机各自提供自己的存储空间,并各自协调管理所有计算机节点中的文件。 这里测试修改主机的报表管理目录树平台标题,然后可以看到辅机会同步修改的配置。其中报表管理目录树存在finedb中,平台样式的平台标题存在fsconfig.xml中。 ?环境准备设置tomcat1、tomcat2、tomcat3集群,tomcat1为主机,tomcat2为辅机,tomcat3为次主机,tomcat集群。 WebReport工程分别放在tomcat下的webapps文件夹里 配置文件集群配置完成之后,修改将配置包resource文件夹下的cluster.xml打 开,如果没有这个文件的话,就新建一个,基本内容如下:

通过Terracotta实现基于Tomcat的Web应用集群

本文介绍如何配置Tomcat和Terracotta服务器将普通的Web应用部署到集群中,实现跨Tomcat节点的session复制,以达到负载均衡、提高系统吞吐量和灾难恢复的效果。 基本原理简介 一般利用Tomcat搭建Web应用集群有如下几种方法: 1、利用负载均衡器的粘session的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失; 2、利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化(serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了; 3、第三种方式是通过cookie保存用户信息的一个或几个关键字,每一个http请求到达web应用的时候,web程序拿这个关键字到数据库中读取相关的数据,然后对其进行处理。也就是说把session数据保存到了数据库中。这样以来在内存中的session就完全不需要了。这样做的缺点就是加大了数据库的负载,使得数据库变成了集群的瓶颈。而通过构造数据库集群提高负载能力往往需要高额的成本。 Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。这样对网络的压力就非常小,各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点达到8个时候,整个集群的吞吐量还一直是线性增长的。 为了方便使用Terracotta搭建Tomcat集群,Terracotta提供了专门的插件tim-tomcat。下面将对集群的搭建进行详细描述。 准备工作 首先需要下载如下软件: Apache Tomcat 目前Terracotta官方支持的Tomcat版本为: Apache Tomcat Apache Tomcat Apache Tomcat Terracotta 或更高版本 安装过程 在所有机器上安装Java 请参考目前支持的软硬件平台 在所有机器上安装Terracotta 选一台机器作为Terracotta服务器

windows下Tomcat负载均衡和集群配置

轻松实现Apache,Tomcat集群和负载均衡 作者:罗代均 ldj_work#https://www.doczj.com/doc/5416178621.html,,转载请保持完整性 0,环境说明 Apache :apache_2.0.55 1 个 Tomcat: apache-tomcat-5.5.17 (zip版) 2个 mod_jk:: mod_jk-apache-2.0.55.so 1个 第一部分:负载均衡 负载均衡,就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理 1.安装apche,tomcat https://www.doczj.com/doc/5416178621.html,/下载Apache 2.0.55 https://www.doczj.com/doc/5416178621.html,/download-55.cgi下载tomcat5.5 zip版本(解压即可,绿色版) https://www.doczj.com/doc/5416178621.html,/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/下载mod_jk,注意和 apache版本匹配 按照jdk,我的路径为:E:\ide\apache\Apache2 解压两份Tomcat, 路径分别为 E:\ide\tomcat1,E:\ide\tomcat2

下载mod_jk

2.修改Apache配置文件http.conf 在apache安装目录下conf目录中找到http.conf 在文件最后加上下面一句话就可以了 include "E:\ide\apache\Apache2\conf\mod_jk.conf"

2. http.conf 同目录下新建mod_jk.conf文件,内容如下 #加载mod_jk Module LoadModule jk_module modules/mod_jk-apache-2.0.55.so #指定 workers.properties文件路径 JkWorkersFile conf/workers.properties #指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器JkMount /*.jsp controller 3.在http.conf同目录下新建 workers.properties文件,内容如下 worker.list = controller,tomcat1,tomcat2 #server 列表 #========tomcat1======== worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009 worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多 #========tomcat2======== worker.tomcat2.port=9009 #ajp13 端口号,在tomcat下server.xml配置,默认8009 worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多

Nginx Tomcat 配置负载均衡集群

一、Hello world 1、前期环境准备 1.准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章《一台机 器同时启动多个tomcat》。 2.nginx官网下载解压版nginx。 3.创建一个简单的web项目。为了直观的区分访问的哪个tomcat,在页面写上标记 8081、8082。 [MISSING IMAGE: , ] 4.分别部署到对应的tomcat下。如图: [MISSING IMAGE: , ] [MISSING IMAGE: , ] 2、配置nginx 进入nginx-1.10.1conf路径,修改配置文件nginx.conf。 1、配置服务器组,在http{}节点之间添加upstream配置。(注意不要写localhost,不然访问速度会很慢) upstream nginxDemo { server 127.0.0.1:8081; #服务器地址1 server 127.0.0.1:8082; #服务器地址2

2、修改nginx监听的端口号80,改为8080。 server { listen 8080; ...... } 3、在location{}中,利用proxy_pass配置反向代理地址;此处“http://”不能少,后面的地址要和第一步upstream定义的名称保持一致。 location / { root html; index index.html index.htm; proxy_pass http://nginxDemo; #配置方向代理地址 } 如下图: [MISSING IMAGE: , ] 3、启动nginx和tomcat,访问 我是Windows系统,所以直接在nginx-1.10.1目录下双击nginx.exe即可。 可在任务管理器中查看

apache2.2.16+mod_jk.1.2.30+tomcat7.0.2集群session复制

Apache+tomcat集群+session复制 作者:吴钢奇 时间:2010/09/23 MSN:w7374520@https://www.doczj.com/doc/5416178621.html, 目标:在服务器上搭建1个apache+4个tomcat应用,tomcat之间实现session复制。Tomcat解析所有的网页,apache此刻的作用就是做代理。参考了很多网上好文档,非常感谢前人无私奉献,谢谢! 1、环境 硬件:一个四核3.0CPU,4G内存,200GSATA硬盘 系统:Redhat AS 5.3 源码包下载: 1、Httpd下载 https://www.doczj.com/doc/5416178621.html,/apache//httpd/httpd-2.2.16.tar.gz 2、Tomcat下载 https://www.doczj.com/doc/5416178621.html,//tomcat/tomcat-7/v7.0.2-beta/bin/apache-tomcat- 7.0.2.tar.gz 3、mod_jk 下载地址: https://www.doczj.com/doc/5416178621.html,/dist/tomcat/tomcat-connectors/jk/source/jk- 1.2.30/tomcat-connectors-1.2.30-src.tar.gz 2、安装apache [root@adman ~]# cd /usr/local/src/ #进入源码包下载目录,这个可以随便定[root@adman src]# tar zxvf httpd-2.2.16.tar.gz #解压缩 [root@adman src]# cd httpd-2.2.16 #进入解压目录 [root@adman httpd-2.2.16]# ./configure --prefix=/usr/local/apache2 \ > --enable-cache \ #configure参数根据自己的需要添加 > --enable-mem-cache \ — 可以使用help获得相关参数 > --with-mpm=prefork \ > --enable-so \ > --enable-rewrite \ > --enable-ssl [root@adman httpd-2.2.16]# make #编译 [root@adman httpd-2.2.16]# make install #安装

linux下TOMCAT集群(proxy)安装文档

Linux下TOMCAT集群安装文档 1版本 Apache:httpd-2.2.21 Tomcat:apache-tomcat-6.0.18 2集群方式 使用Apache R-proxy方式 3 TOMCAT安装 上传apache-tomcat-6.0.18到服务器 Cd apache-tomcat-6.0.18 mkdir logs chmod 755 logs cd bin chmod 755 *.sh 启动:./startup.sh 关闭:./shutdown.sh 4 apache安装(源码安装方式) cd /usr/local/ mkdir apache2.2.21 上传httpd-2.2.21.tar.gz到服务器路径下 tar -zxvf httpd-2.2.21.tar.gz ./configure --prefix=/usr/local/apache2.2.21 --enable-mods-shared=most Make(编译) make install(安装)

5配置httpd.conf(假设需要更改监听的端口) 以下是列出两个需要修改的地方: ServerName 127.0.0.1:9008 Listen 9008 6启动 cd apache2.2.21/bin/ ./apachectl start 在浏览器中输入http://127.0.0.1/ 就可以看到 It works! 7安装mod_proxy.so和mod_proxy_ajp.so,mod_proxy_balancer .so模块 Cd /usr/local/apache2.2.21/httpd-2.2.21/modules/proxy /usr/local/apache2.2.21/bin/apxs -i -a -c mod_proxy.c proxy_util.c /usr/local/apache2.2.21/bin/apxs -i -a -c mod_proxy_ajp.c ajp*.c /usr/local/apache2.2.21/bin/apxs -i -a -c mod_proxy_balancer.c 安装成功后,可以到/usr/local/apache2.2.21/conf 查看文件httpd.conf 是否安装成功 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 8配置httpd.conf集群 #snail add 20111027 proxy配置信息

Tomcat6+Apache2.2集群配置说明文档

Tomcat6+Apache2.2集群配置说明文档 yysy2000@https://www.doczj.com/doc/5416178621.html, 2009-7-24 准备工作: 注:可点击链接直接下载相应的文件。 JDK 免述,这个要是搞不定,直接回家种地吧。本文使用1.6.0_13 Tomcat版本号:apache-tomcat-6.0.18.zip Apache版本号:apache_2.2.11-win32-x86-openssl-0.9.8i 另外:tomcat-connectors-1.2.28-src.zip(apache网站tomcat项目下有下载)mod_jk-1.2.28-httpd-2.2.3.so(2.2.3适合于apache2.2.x版本) 程序安装: 1.正常安装apache(默认安装到C:\Program Files\Apache Software Foundation\Apache 2.2 目录下) 2.解压缩apache-tomcat-6.0.18.zip到C:\Program Files\Apache Software Foundation\Tomcat6.0目录下,解压完毕后,重命名tomcat6.0_1, 3.复制tomcat6.0_1文件夹,重命名为tomcat6.0_2 4.拷贝mod_jk-1.2.28-httpd-2.2.3.so 到Apache2.2/modules目录下 5.解压tomcat-connectors-1.2.28-src.zip,拷贝tomcat-connectors-1.2.28-src\conf文件夹中的 workers.properties 到Apache2.2/conf 目录下(该文件中配置用于集群的Tomcat信息) tomcat配置: 注:以下配置使用端口号可自行定义,只要不和系统中已经使用的端口号冲突即可。 1.conf文件夹下的server.xml文件作如下修改: 1)更正SHUTDOWN端口(两个tomcat分别使用8005和8006) 2)HTTP1.1的connector可以关闭不使用(由apache调度),也可以不关闭(亦可访 问响应端口,即不通过apache调度,设定的端口不应与其他端口重复)。 3)更正AJP1.3端口(两个tomcat分别使用8090和8091),redirectPort亦应不同(分 别使用8443和8444)。 4)替换原来的engine标签,设置jvmRoute的路径以支持通过AJP的负载均衡(不同

用apache和tomcat搭建集群,实现负载均衡

型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问题需要解决。 一.Session的复制 二.如何将请求发送到正常的服务器 针对以上问题,可以使用群集和负载均衡来解决,整体架构如下: (图片来自:https://www.doczj.com/doc/5416178621.html,) 中间由一台服务器做负载均衡(Load Balancer),它将所有请求,根据一定的负载均衡规则发送给指定的群集服务器(Cluster),群集服务器拥有着相同的状态和相同的应用程序,并且他们的Session是相互复制的,这样,不管访问哪台服务器都具有相同的结果,即使一台服务器崩溃掉以后,可以由其他集群服务器继续负责应用程序的运行。 Tomcat中如何配置群集我们假设有如下场景,一台负载均衡服务器负责请求的均衡,群集服务器A和群集服务器B组成一个群集,当某个群集服务器崩溃后,另外一台继续负责应用程序的运行。 一.配置Tomcat5.5.12群集服务器A 修改Tomcat配置文件server.xml

1.群集服务器A的端口号与B不冲突,即使Server Port,Connector,Coyote/JK2 AJP Connector的端口号唯一2.在Host元素下增加以下内容: 3.修改Web应用程序配置文件web.xml 在web.xml文件中元素下增加以下内容:

Linux平台Apache高可用双机集群Tomcat负载均衡集群配置手册

Linux平台Apache双机高可用集群 + Tomcat负载均衡集群配置手册

在这个配置手册中,使用的操作系统和软件清单如下: 操作系统: RedHat Enterprise Linux AS4 U4 64bit(安装时最好选择完全安装) 软件: jdk-1_5_0_15-linux-amd64.bin Tomcat5.5.26 httpd-2.0.63.tar.gz jakarta-tomcat-connectors-jk2-src-current.tar.gz ipvsadm-1.24.tar.gz libnet.tar.gz heartbeat-2.1.3-3.el4.centos.x86_64.rpm heartbeat-pils-2.1.3-3.el4.centos.x86_64.rpm heartbeat-stonith-2.1.3-3.el4.centos.x86_64.rpm 因为是linux操作系统,所以在安装软件时请使用对应自己操作系统内核的软件,这是整个集群成功的第一步。本配置手册中的软件都是对应RedHat Enterprise Linux AS4 U4 64bit 这个版本的软件。 jdk-1_5_0_15-linux-amd64.bin JAVA环境包使用的是64位1.5版 Tomcat版本为公司指定的5.5版本 Apache为2.0.63版 jakarta-tomcat-connectors-jk2-src-current.tar.gz 是连接Apache和Tomcat的连接插件,具体可以去Tomcat网站上查找下载 ipvsadm-1.24.tar.gz libnet.tar.gz 这两个是用于2台Apache服务器虚拟一个IP地址使用 heartbeat-2.1.3-3.el4.centos.x86_64.rpm heartbeat-pils-2.1.3-3.el4.centos.x86_64.rpm heartbeat-stonith-2.1.3-3.el4.centos.x86_64.rpm 这3个软件是用于2台Apache服务器之间的心跳检测

Tomcat集群搭建

本文Apache+Tomcat集群配置基于apache tomcat6.0.35 和apache http server 2.2实现均衡负载 准备环境 Apache Apache是http服务器,我们利用其对Tomcat进行负载均衡。目前最新版本为2.2.?,下载地址为https://www.doczj.com/doc/5416178621.html,/download.cgi#apache22。如下图: 目前已经出现Apache2.3.11,但是为beta版本,所以没有使用。 下载后直接安装msi即可,如果没有其他的http服务器(如iis)则应该可以成功安装,端口即为80,能够访问http://localhost/说明安装成功。建议不要监听80端口,因为有时候80端口已经被IIS服务器给占或者其他软件被占的话,apache server是安装不成功的(这样会报错:Address already in use: make_sock: could not bind to port 80/443…)。如果想改监听的端口,请修改httpd.conf,找到:listen 80 改成 listen 8080即可监听8080端口 Tomcat Tocmat7目前已经出现稳定版本的7.0.12,Tomcat6则为6.0.32。经我测试,这2个版本的Apache负载均衡配置过程都是一样的,因此下面的配置在Tomcat6或7集群是通用的。但是按照下面的配置,集群中Tomcat不能既有Tomcat6又有Tomcat7,否则虽能够负载均衡,但不能进行session复制,不知其他方式配置的集群是否可以。

Tomcat就不用怎么介绍了。既然在本地需要多个节点,那么需要下载ZIP 版本的Tomcat。 JK JK是Tomcat提供给http服务器的插件(个人理解的),下载地址为 https://www.doczj.com/doc/5416178621.html,/apache/tomcat/tomcat-connectors/jk/binaries /windows/。如下图:(请下版本号能对应的so) 这里选择的是mod_jk-1.2.31-httpd-2.2.3.so,如果http服务器是Apache2.0.X版本,则必须选择mod_jk-1.2.31-httpd-2.0.52.so,页面下方有英文的说明,大家可以看下。 其实我也在网上看到Apache2.2已经集成Tomcat插件模块了,可以不用JK 插件就可以实现Tomcat负载均衡,但也需要一些配置,而JK这个配置相比也不复杂,就先记录下来。 配置过程 下面就直接写过程了,我也是网络上学习的,只是总结下过程并且利用最新的Apache和Tomcat测试了下,还是与网络上有些不同的。 修改Apache配置 1、修改httpd.conf

Tomcat集群部署

T omcat集群部署 1 部署准备 (1) 1.1所需软件介绍 (1) 1.2windows平台 (2) 1.3Unix平台 (2) 2 部署步骤 (2) 2.1 坏境说明 (3) 2.2 安装过程 (3) 2.3 负载均衡过程 (4) 2.4 Tomcat集群配置 (6) 2.5 应用配置 (8) 2.6 关于会话复制 (9) 3.效果演示 (9) 3.1 成功后的效果 (9) 3.2 效果演示录像 (10) 4.相关说明 (10) 4.1 目录说明 (10) 4.2 其他说明 (10) 4.3 作者说明 (10) 1 部署准备 1.1所需软件介绍 ?Apache HTTP Server 该软件是Apache开源软件,主要用于HTTP请求服务,在加载一些插件后,也可实现一些其他的功能,如在加载JK插件后,其能实现集群以及负载平衡 的功能. 其详细的介绍可参考Apache官方网站中关于Apache HTTP Server的介绍,其网址为: https://www.doczj.com/doc/5416178621.html,/。在本次部署中,采用的是Apache HTTP Server 2.0版本. ?Tomcat

本次测试中采用的Tomcat5.0.28版本 Jk2插件 Apache的一个开源插件,主要用于实现集群,以及负载平衡。在本次部署中主要采用的JK2版本,这个插件比较难找,在Apache的官方网站上没有作为一个 单独项目列出来,而是放在与Tomcat相关的一个工具包中,下载地址为: https://www.doczj.com/doc/5416178621.html,/dist/tomcat/tomcat-connectors/ 1.2windows平台 windows 平台下的集群部署相对简单,其所需的软件均已编译好,下载后安装即可,其相关的软件已经下载,按照其后面讲解的部署步骤部署即可,其在网上的下载地址分别为: https://www.doczj.com/doc/5416178621.html,/download.cgi https://www.doczj.com/doc/5416178621.html,/download-55.cgi#5.0.28 https://www.doczj.com/doc/5416178621.html,/dist/tomcat/tomcat-connectors/jk2/binaries/win32/ 1.3Unix平台 Unix平台上部署相对复杂,所需的Apache HTTP Server2.0下载下来后,还需先经过编译后方可使用,考虑到在不同的unix系统上,尚有一些差异,编译这一步各位在部署时进行,本次部署时就不提供编译好的Apache HTTP Server 2.0,其所需的软件下载地址分别为: https://www.doczj.com/doc/5416178621.html,/download.cgi https://www.doczj.com/doc/5416178621.html,/download-55.cgi#5.0.28 https://www.doczj.com/doc/5416178621.html,/dist/tomcat/tomcat-connectors/jk2/binaries/solaris/ 2 部署步骤 以下部署步骤为引用自互联网上的原文

Tomcat集群及负载均衡配置

Tomcat集群及负载均衡配置 在单一的服务器上执行Web应用程序有一些重大问题,当网站的请求量越来越大,单一服务器终究无法满足需要处理的负荷量,所以就显得有点力不从心;而且还存在的问题是会产生单点故障,如果该服务器宕掉,那么网站就无法运作。不论是因为要有较佳的扩充性还是容错能力,我们都会想在一台以上的服务器上执行Web应用程序。所以,这时候我们就需要用到集群这一门技术。 1术语介绍 1.1 集群 集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就像是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性: 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service 的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

1.2 负载均衡 负载的基础是集群,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同的硬件构成的计算机。如一个提供Web 服务的集群,对外界看来是一个大Web服务器。负载均即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。 2常用负载均衡技术 常用手负载均衡技术有以下几种 HTTP重定向 DNS负载均衡 反向代理负载均衡 IP负载均衡(NAT) 直接路由 IP隧道 本文介绍的是第三种使用apahce+tomcat的反向代理的负载均衡,使用代理服务器可以将请求转发全内部的Web服务器,让代理服务器均匀地转发给多台内部web服务器之一上,从而达到负载均衡目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

Tomcat6终极优化

Tomcat6内存和线程配置 当在对其进行并发测试时,基本上30个USER上去就当机了,还要修改默认连接数设置:以下红色四行TOMCAT6中好相没有,手工加上就可以了,基本上可以解决连接数过大引起的死机。具体数值可跟据实际情况设置 这样设置以后,基本上没有再当机过。。。。。 maxThreads="600"///最大线程数 minSpareThreads="100"///初始化时创建的线程数 maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。 acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 Tomcat6使用安装版本进行安装后,使用内存的调整无法利用修改启动文件的方式进行,但按缺省方式启动后如果启动的应用较多的话Tomcat经常会因为内存不足而失去响应,这个时候必须人工调整内存参数: 1.“开始”--“Apache Tomcat6”--“Configure Tomcat” 2.选择Java标签,在“Initial memory pool(初始内存)”和“Maximum memory pool(最大内存)”中输入你 需要的内存参数即可 与内存相关的tomcat错误处理: https://www.doczj.com/doc/5416178621.html,ng.OutOfMemoryError:这个错误是因为tomcat JVM的Permanent Generation space(内存的 永久保存区域)不足引起的,这个区域是JVM用于用于存放Class和Meta的信息的内存区域,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话, 就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果 你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了,症状是tomcat运行一段时间后失去反应,服务中tomcat服务正常,重启tomcat服务后网站又正常响应了。解决方案是人工调整确认大小设置,使用regedit修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java中的Options参数,在后面增加一下数据: -XX:PermSize=64M

相关主题
文本预览
相关文档 最新文档