首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

透过 Terracotta实现基于Tomcat的Web应用集群教程

2012-07-29 
通过 Terracotta实现基于Tomcat的Web应用集群教程http://forums.terracotta.org/forums/posts/list/2342.p

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

http://forums.terracotta.org/forums/posts/list/2342.page

官方论坛详细问题

本教程介绍如何配置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版本为:
o Apache Tomcat 6.0.18
o Apache Tomcat 5.5.26
o Apache Tomcat 5.0.28
* Terracotta 3.0或更高版本

安装过程
1. 在所有机器上安装Java
请参考目前支持的软硬件平台
2. 在所有机器上安装Terracotta
* 选一台机器作为Terracotta服务器
* 在所有运行Tomcat的机器上也安装Terracotta,他们将称为Terracotta客户端
3. 在应用服务器节点上安装Tomcat
4. 把要部署的Web应用部署在所有Tomcat上

配置过程
下载附件中的Terracotta 配置文件,保存到 ${TERRACOTTA_HOME}/tc-config.xml(Unix上)或者 ${TERRACOTTA_HOME}\tc-config.xml(Windows上)。
修改web-applications和web-application部分,把要共享session的应用的contex配置上:

Tomcat 6.0, edit the name to "tim-tomcat-6.0". -->

<clients>
<modules>
<module name="tim-tomcat-6.0" version="1.1.0" />
</modules>
</clients>

<!-- Using <web-application> elements, enter the context root of the web application being clustered.
If you are clustering more than one web application, use one <web-application> element per application.
Two example <web-application> elements are shown below. Edit or remove these elements as needed.
To set the value of the <web-application> element to the default web-application context, use the
special value "ROOT" (without quotation marks). -->

<application>
<dso>
<instrumented-classes>
<include>
<class-expression>num.NumberGuessBean</class-expression>
</include>
<include>
<class-expression>cal.*</class-expression>
</include>
</instrumented-classes>

<web-applications>
<web-application>examples</web-application>
</web-applications>
</dso>
</application>
</tc:tc-config>
?

热点排行