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

上传人:b****4 文档编号:4137972 上传时间:2023-05-06 格式:DOCX 页数:16 大小:22.04KB
下载 相关 举报
通过Terracotta实现基于Tomcat的Web应用集群.docx_第1页
第1页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第2页
第2页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第3页
第3页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第4页
第4页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第5页
第5页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第6页
第6页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第7页
第7页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第8页
第8页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第9页
第9页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第10页
第10页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第11页
第11页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第12页
第12页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第13页
第13页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第14页
第14页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第15页
第15页 / 共16页
通过Terracotta实现基于Tomcat的Web应用集群.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《通过Terracotta实现基于Tomcat的Web应用集群.docx》由会员分享,可在线阅读,更多相关《通过Terracotta实现基于Tomcat的Web应用集群.docx(16页珍藏版)》请在冰点文库上搜索。

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

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

本文介绍如何配置Tomcat和Terracotta服务器将普通的Web应用部署到集群中,实现跨Tomcat节点的session复制,以达到负载均衡、提高系统吞吐量和灾难恢复的效果。

基本原理简介

一般利用Tomcat搭建Web应用集群有如下几种方法:

1、利用负载均衡器的粘session的方式把所有同一session的请求都发送到相同的Tomcat节点。

这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。

这样做的缺点是没有灾难恢复的能力。

一旦一个节点发生故障,这个节点上所有的session信息全部丢失;

2、利用Tomcatsession复制的机制使得所有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。

下面将对集群的搭建进行详细描述。

准备工作

首先需要下载如下软件:

ApacheTomcat

目前Terracotta官方支持的Tomcat版本为:

ApacheTomcat

ApacheTomcat

ApacheTomcat

Terracotta或更高版本

安装过程

在所有机器上安装Java

请参考目前支持的软硬件平台

在所有机器上安装Terracotta

选一台机器作为Terracotta服务器

在所有运行Tomcat的机器上也安装Terracotta,他们将称为Terracotta客户端

在应用服务器节点上安装Tomcat

把要部署的Web应用部署在所有Tomcat上

配置过程

下载附件中的文件,保存到${TERRACOTTA_HOME}/(Unix上)或者${TERRACOTTA_HOME}\(Windows上)。

修改web-applications和web-application部分,把要共享session的应用的contex配置上:

my_web_app1

my_web_app2

 

您可能还需要修改Terracotta服务器的信息。

比如:

--IPorhostnameofTCserver-->

9510

 

把配制好的文件拷贝到所有机器上。

然后在每一台机器上,进入TERRACOTTA_HOME目录,运行:

UNIX/LINUX

bin/upgrade

bin\upgrade

配置Tomcat应用服务器

在Tomcat安装目录的bin子目录中创建(Unix)或(Windows)文件。

其内容为:

UNIX/LINUX

TC_INSTALL_DIR=<本地Terracotta安装目录>

TC_CONFIG_PATH=<本地的完整文件名>

.$TC_INSTALL_DIR/bin/-q

exportJAVA_OPTS="$JAVA_OPTS$TC_JAVA_OPTS"

.

Windows

setTC_INSTALL_DIR=<本地Terracotta安装目录>

setTC_CONFIG_PATH=<本地的完整文件名>

call%TC_INSTALL_DIR%\bin\-q

setJAVA_OPTS=%JAVA_OPTS%%TC_JAVA_OPTS%

启动集群

在Terracotta服务器上的Terracotta安装目录执行如下命令:

UNIX/LINUX

bin/&

Windows

bin\

 

在每一台Web应用服务器上的Tomcat安装目录的bin子目录下执行:

UNIX/LINUX

./

Windows

 

等Tomcat启动以后,查看Tomcat日志文件,确认Terrocotta已经启动。

比如在Mac环境中,使用Terracotta,看到的日志将包括如下内容:

2009-07-1710:

57:

39,425INFO-Terracottaasof-130552(Revision12704bycruise@su10mo5from

2009-07-1710:

57:

39,828INFO-Configurationloadedfromthefileat'/Users/lma/'.

2009-07-1710:

57:

39,975INFO-Logfile:

'/Users/lma/apps/'.

2009-07-1710:

57:

42,312INFO-Connectionsuccessfullyestablishedtoserverat

 

如果能看到上述信息,说明Terracotta和Tomcat都正常启动,并且已经与Terracotta服务器成功建立了连接。

验证Session集群

集群启动后,我们可以利用Tomcat内置的Web应用examples来验证集群是否成功配置好。

比如有两台Tomcat服务器分别为和。

首先启动(Unix)或(Windows),连接到Terracotta服务器上。

您可以看到所有Tomcat节点都显示在ConnectedClients中。

另外在ObjectBrowser中可以看到一个共享数据:

tc:

session_localhost/examples

说明所有session已经被共享到Terracotta服务器上了。

下面把浏览器指向:

,把如下配置添加到中:

cal.*

重新启动Tomcat。

再打开前面的页面。

您可能还会遇见TCNonPortableObjectError,不过这次的错误是有关bootjar的:

toshareaninstanceofanon-portableclassreferencedbyaportableclass.ThisunshareableclassmustbeintheDSObootjar.ItalsohassuperclasseswhichmustbeintheDSObootjar.Pleaseaddalloftheseclassestothebootjarconfigurationandre-createtheDSObootjar.

只要认真阅读错误信息,按照提示的方法配置文件,然后执行下面的命令重新生成bootjar文件,再重新启动Tomcat就可以了:

$TERRACOTTA_HOME/bin/-f$TOMCAT_HOME/

 

处理完上述问题后,例子程序中会显示一个日历管理系统。

您可以在里面配置一天的工作日程。

在第一台Tomcat服务器上配置好一天的日程,然后到第二台服务器上,打开相同的页面,您会看到前面输入的日程已经显示出来了。

您还可以试着在第二台服务器上对日程进行修改,再到第一台上面刷新页面,前面的修改也会立即显示出来。

这说明两台Tomcat服务器的session信息已经完全同步了。

错误处理

1.如果启动失败,有可能是JAVA_OPTS没有配置好。

可以尝试在startupTC文件中,在setJAVA_OPTS后面打印出JAVA_OPTS的内容。

应该看到类似下面的内容:

-Xmx512m-Xms512M-Xbootclasspath/p:

/Users/lma/terracotta/=/Users/lma/terracotta/=/Users/lma/

 

2.如果遇见TCNonPortableObjectException异常,说明在Session中共享的类没有包含在的instrumented-classes配置中。

一般在异常新吸力面Terracotta会包含需要添加到配置文件中的信息,比如:

只要按照提示把配置信息放到文件中,然会从新启动Tomcat即可。

附件-

tc-configxmlns:

tc=""

xmlns:

xsi=""

xsi:

schemaLocation="">

--FormoreinformationonworkingwiththeTerracottaconfigurationfile,includinghowtoadd

moreservers,see

Editthefollowingserverelementsothatitshostattributecontainsthevaluematchingthe

hostnamefortheTerracottaserver.-->

9510

true

--CheckthattheTIMshownintheelement'snameattributematchestheTomcatversionyou

areusing.TheTIMlistedhere,""isforTomcat.Forexample,ifyouareusing

Tomcat,editthenameto"".-->

--Usingelements,enterthecontextrootofthewebapplicationbeingclustered.

Ifyouareclusteringmorethanonewebapplication,useoneelementperapplication.

Twoexampleelementsareshownbelow.Editorremovetheseelementsasneeded.

Tosetthevalueoftheelementtothedefaultweb-applicationcontext,usethe

specialvalue"ROOT"(withoutquotationmarks).-->

cal.*

examples

tc-config>

 

本文来自CSDN博客,转载请标明出处:

另一篇文章,

 

Terracotta是一款由美国Terracotta公司开发的著名开源Java集群平台。

它在JVM与Java应用之间实现了一个专门处理集群功能的抽象层,以其特有的增量检测、智能定向传送、分布式协作、服务器镜像、分片等技术,允许用户在不改变现有系统代码的情况下实现单机Java应用向集群话应用的无缝迁移。

使得用户可以专注于商业逻辑的开发,由Terracotta负责实现高性能、高可用性、高稳定性的企业级Java集群.Terracotta公司在2009年收购了著名的Java开源缓存项目Ehcache以及Java任务调度项目Quartz。

经过对该项目的深度整合,Terracotta推出了易用性更高的分布式缓存、分布式任务调度以及分布式WebSession等快捷解决方案.以上引自老马的文章,具体可参看作者文章了解。

配置环境:

我的配置环境是:

winxp,—17,,,,terracotta版本是,目前最新版本是,可在下载。

实战:

首先需要说明的是terracotta分为expressmode(快捷模式)和客户化模式,expressmode能够让大家快速上手,不需要复杂的配置就可运行起来,而客户化模式则有很多高级功能,而且需要配置相应的文件,初学可以先运行expressmode作为学习。

首先以expressmode模式为例说明

1.首先下载terracotta。

jar,前提是机器已经安装jdk及配置好了java_home,利用java-jarterracotta。

jar命令安装terracotta,安装时最好保持jdk及terracotta安装目录名称都没有空格。

2.首先集成session复制,将terracotta安装目录下的sessions文件夹下的拷贝到\server\lib文件夹下,然后

将文件(此文件可参见安装目录下的sessions\conf-samples的例子文件)拷贝到我们自己项目的META-INF文件夹下,具体内容根据使用的不同中间件进行不同配置,一下是使用的配置,其他的也可看光放文档说明

例如:

9510"/>

--tomcat-->

将我们的web工程发布到webapps下,启动bin/下的即可,然后到TerracottaConsole控制台查看objectbrower下是否出现tc:

session。

也可运行terracotta自带的例子,位于安装目录下的sessions\samples\下,验证时客气起双tomcat分配不同的端口号,打开两个浏览器窗口进行验证。

客户化模式的session复制可参见老马博客文章。

2.集成hibernate二级缓存

集成的时候需要注意将将安装后的terracotta文件夹下的、、、等文件拷贝到项目的lib文件夹下,配置hibernate属性

true

           true

              

加粗部分根据使用的hibernate不同版本配置,在中就需要配置为

name

=

""

>

ForHibernate则是上面加粗部分配置。

文件的配置为大致如下:

     maxElementsInMemory="10"

     eternal="false"

     timeToIdleSeconds="120"

      timeToLiveSeconds="120"

     >

   

   

 

9510"/>

  需要注意的是快捷模式下无法使用valueMode="identity"模式

具体可根据需要进行扩展。

下面要讲述的客户化模式配置会有很大却别。

以上是express模式的大致配置。

下面记录客户化模式

3.客户化模式下的session复制及缓存

快捷模式不需要tc-config。

Xml文件的支持,直接启动start-tc-server。

Bat(win下)就可以,而客户化模式需要在tc-config.Xml文件中进行配置。

验证session复制的时候就不需要惊醒context。

xml的配置及的拷贝,一切都在tc-config.Xml配置文件中配置大致配置如下:

--FormoreinformationonworkingwiththeTerracottaconfigurationfile,includinghowtoadd

     moreservers,see

    

     Editthefollowingserverelementsothatitshostattributecontainsthevaluematchingthe

     hostnamefortheTerracottaserver.-->

  

    

    data/server-data

     logs/server-logs

     9530

        

          permanent-store

        

      

  

   

    

   

      true

   

--CheckthattheTIMshownintheelement'snameattributematchestheTomcatversionyou

     areusing.TheTIMlistedhere,""isforTomcat.Forexample,ifyouareusing

     Tomcat,editthenameto"". -->

     

 

   

     

     

     

     

 

    

     

   

         

        

        

        

     

   

 

--Usingelements,enterthecontextrootofthewebapplicationbeing

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2