1、通过Terracotta实现基于Tomcat的Web应用集群本文介绍如何配置Tomcat和Terracotta服务器将普通的Web应用部署到集群中,实现跨Tomcat节点的session复制,以达到负载均衡、提高系统吞吐量和灾难恢复的效果。基本原理简介一般利用Tomcat搭建Web应用集群有如下几种方法:1、利用负载均衡器的粘session的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失;2、利用
2、Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化(serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采用这种方式,当Tomcat节点超过4个时
3、候,整个集群的吞吐量就不能再上升了;3、第三种方式是通过cookie保存用户信息的一个或几个关键字,每一个http请求到达web应用的时候,web程序拿这个关键字到数据库中读取相关的数据,然后对其进行处理。也就是说把session数据保存到了数据库中。这样以来在内存中的session就完全不需要了。这样做的缺点就是加大了数据库的负载,使得数据库变成了集群的瓶颈。而通过构造数据库集群提高负载能力往往需要高额的成本。Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个
4、数据的节点。这样对网络的压力就非常小,各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点达到8个时候,整个集群的吞吐量还一直是线性增长的。为了方便使用Terracotta搭建Tomcat集群,Terracotta提供了专门的插件tim-tomcat。下面将对集群的搭建进行详细描述。准备工作首先需要下载如下软件:Apache Tomcat 目前Terracotta官方
5、支持的Tomcat版本为: Apache Tomcat Apache Tomcat Apache Tomcat Terracotta 或更高版本 安装过程在所有机器上安装Java请参考目前支持的软硬件平台 在所有机器上安装Terracotta 选一台机器作为Terracotta服务器 在所有运行Tomcat的机器上也安装Terracotta,他们将称为Terracotta客户端 在应用服务器节点上安装Tomcat 把要部署的Web应用部署在所有Tomcat上 配置过程下载附件中的文件,保存到 $TERRACOTTA_HOME/(Unix上)或者 $TERRACOTTA_HOME(Windows
6、上)。修改web-applications和web-application部分,把要共享session的应用的contex配置上: my_web_app1 my_web_app2 您可能还需要修改Terracotta服务器的信息。比如: 9510 把配制好的文件拷贝到所有机器上。然后在每一台机器上,进入TERRACOTTA_HOME目录,运行:UNIX/LINUX bin/ upgrade Windows bin upgrade 配置Tomcat应用服务器在Tomcat安装目录的bin子目录中创建(Unix)或(Windows)文件。其内容为:UNIX/LINUX TC_INSTALL_DIR
7、=TC_CONFIG_PATH=. $TC_INSTALL_DIR/bin/ -qexport JAVA_OPTS=$JAVA_OPTS $TC_JAVA_OPTS. Windows set TC_INSTALL_DIR=set TC_CONFIG_PATH=call %TC_INSTALL_DIR%bin -qset JAVA_OPTS=%JAVA_OPTS% %TC_JAVA_OPTS% 启动集群在Terracotta服务器上的Terracotta安装目录执行如下命令:UNIX/LINUX bin/ & Windows bin 在每一台Web应用服务器上的Tomcat安装目录的bin子目录
8、下执行:UNIX/LINUX ./ Windows 等Tomcat启动以后,查看Tomcat日志文件,确认Terrocotta已经启动。比如在Mac环境中,使用Terracotta ,看到的日志将包括如下内容:2009-07-17 10:57:39,425 INFO - Terracotta as of -130552 (Revision 12704 by cruisesu10mo5 from 2009-07-17 10:57:39,828 INFO - Configuration loaded from the file at /Users/lma/.2009-07-17 10:57:39,
9、975 INFO - Log file: /Users/lma/apps/.2009-07-17 10:57:42,312 INFO - Connection successfully established to server at 如果能看到上述信息,说明Terracotta和Tomcat都正常启动,并且已经与Terracotta服务器成功建立了连接。验证Session集群集群启动后,我们可以利用Tomcat内置的Web应用examples来验证集群是否成功配置好。比如有两台Tomcat服务器分别为和。首先启动(Unix)或(Windows),连接到Terracotta服务器上。您可以看到
10、所有Tomcat节点都显示在Connected Clients中。另外在Object Browser中可以看到一个共享数据:tc:session_localhost/examples说明所有session已经被共享到Terracotta服务器上了。下面把浏览器指向:,把如下配置添加到中: cal.* 重新启动Tomcat。再打开前面的页面。您可能还会遇见TCNonPortableObjectError,不过这次的错误是有关boot jar的: to share an instance of a non-portable class referenced by a portable class.
11、 This unshareable class must be in the DSO boot jar. It also has superclasses which must be in the DSO boot jar. Please add all of these classes to the boot jar configuration and re-create the DSO boot jar. 只要认真阅读错误信息,按照提示的方法配置文件,然后执行下面的命令重新生成boot jar文件,再重新启动Tomcat就可以了:$TERRACOTTA_HOME/bin/ -f $TOMC
12、AT_HOME/ 处理完上述问题后,例子程序中会显示一个日历管理系统。您可以在里面配置一天的工作日程。在第一台Tomcat服务器上配置好一天的日程,然后到第二台服务器上,打开相同的页面,您会看到前面输入的日程已经显示出来了。您还可以试着在第二台服务器上对日程进行修改,再到第一台上面刷新页面,前面的修改也会立即显示出来。这说明两台Tomcat服务器的session信息已经完全同步了。错误处理1. 如果启动失败,有可能是JAVA_OPTS没有配置好。可以尝试在startupTC文件中,在set JAVA_OPTS后面打印出JAVA_OPTS的内容。应该看到类似下面的内容:-Xmx512m -Xms
13、512M -Xbootclasspath/p:/Users/lma/terracotta/ =/Users/lma/terracotta/ =/Users/lma/ 2. 如果遇见TCNonPortableObjectException异常,说明在Session中共享的类没有包含在的 instrumented-classes配置中。一般在异常新吸力面Terracotta会包含需要添加到配置文件中的信息,比如: 只要按照提示把配置信息放到文件中,然会从新启动Tomcat即可。附件 9510 true !- Check that the TIM shown in the elements name
14、 attribute matches the Tomcat version you are using. The TIM listed here, is for Tomcat . For example, if you are using Tomcat , edit the name to . - !- Using elements, enter the context root of the web application being clustered. If you are clustering more than one web application, use one element
15、 per application. Two example elements are shown below. Edit or remove these elements as needed. To set the value of the element to the default web-application context, use the special value ROOT (without quotation marks). - cal.* examples 本文来自CSDN博客,转载请标明出处: 另一篇文章,Terracotta 是一款由美国Terracotta 公司开发的著
16、名开源Java 集群平台。它在JVM 与Java 应用之间实现了一个专门处理集群功能的抽象层,以其特有的增量检测、智能定向传送、分布式协作、服务器镜像、分片等技术,允许用户在不改变现有系统代码的情况下实现单机Java 应用向集群话应用的无缝迁移。使得用户可以专注于商业逻辑的开发,由Terracotta 负责实现高性能、高可用性、高稳定性的企业级Java 集群. Terracotta 公司在2009 年收购了著名的Java 开源缓存项目Ehcache 以及Java 任务调度项目Quartz 。经过对该项目的深度整合,Terracotta 推出了易用性更高的分布式缓存、分布式任务调度以及分布式We
17、b Session 等快捷解决方案.以上引自老马的文章,具体可参看作者文章了解。 配置环境: 我的配置环境是:winxp,17,terracotta版本是,目前最新版本是,可在下载。 实战: 首先需要说明的是 terracotta分为express mode(快捷模式)和客户化模式, express mode能够让大家快速上手,不需要复杂的配置就可运行起来,而 客户化模式则有很多高级功能,而且需要配置相应的文件,初学可以先运行 express mode作为学习。 首先以express mode模式为例说明 1.首先下载terracotta 。jar,前提是机器已经安装jdk及配置好了java_
18、home,利用java -jar terracotta 。jar命令安装 terracotta ,安装时最好保持jdk及 terracotta 安装目录名称都没有空格。 2.首先集成session复制,将terracotta安装目录下的sessions文件夹下的 拷贝到serverlib文件夹下,然后 将 文件(此文件可参见安装目录下的sessionsconf-samples的例子文件)拷贝到我们自己项目的 META-INF 文件夹下,具体内容根据使用的不同中间件进行不同配置,一下是使用的配置,其他的也可看光放文档说明 例如: 将我们的web工程发布到webapps下,启动bin/下的即可,然
19、后到Terracotta Console控制台查看object brower下是否出现tc:session。也可运行 terracotta自带的例子,位于安装目录下的sessionssamples下,验证时客气起双tomcat分配不同的端口号,打开两个浏览器窗口进行验证。 客户化模式的session复制可参见老马博客文章。 2.集成hibernate二级缓存 集成的时候需要注意将将安装后的terracotta 文件夹下的 、 、 、 等文件拷贝到项目的lib 文件夹下,配置hibernate属性 true true 加粗部分根据使用的hibernate不同版本配置,在中就需要配置为 For H
20、ibernate 则是上面加粗部分配置。 文件的配置为大致如下: 需要注意的是快捷模式下无法使用 valueMode=identity 模式 具体可根据需要进行扩展。下面要讲述的客户化模式配置会有很大却别。 以上是express模式的大致配置。下面记录客户化模式 3.客户化模式下的session复制及缓存 快捷模式不需要 tc-config 。 Xml 文件的支持,直接启动start-tc-server 。Bat (win下)就可以,而客户化模式需要在 tc-config . Xml 文件中进行配置。 验证session复制的时候就不需要惊醒context。xml的配置及的拷贝,一切都在tc-
21、config . Xml配置文件中配置大致配置如下: data/server-data logs/server-logs 9530 permanent-store true !- Check that the TIM shown in the elements name attribute matches the Tomcat version you are using. The TIM listed here, is for Tomcat . For example, if you are using Tomcat , edit the name to . - !- Using elements, enter the context root of the web application being
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1