Terracotta
学习文档
目 录
1. 引言
本学习文档主要介绍了Terracotta基本原理和如何配置Tomcat和Terracotta服务器将普通的Web应用部署到集群中,实现跨Tomcat节点的session复制,以达到负载均衡、提高系统吞吐量和灾难恢复的效果。
2. 基本原理简介
Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。这样对网络的压力就非常小,各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,相当于对tomcat第二种集群实现机制进行了优化,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。在对比测试中,采用Terracotta搭建Tomcat集群,节点达到8个时候,整个集群的吞吐量还一直是线性增长的。
3. Tomcat搭建Web应用集群
一般利用Tomcat搭建Web应用集群有如下三种方法:
① 利用负载均衡器的粘session的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失;
② 利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化(serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了;
③ 第三种方式是通过cookie保存用户信息的一个或几个关键字,每一个http请求到达web应用的时候,web程序拿这个关键字到数据库中读取相关的数据,然后对其进行处理。也就是说把session数据保存到了数据库中。这样以来在内存中的session就完全不需要了。这样做的缺点就是加大了数据库的负载,使得数据库变成了集群的瓶颈。而通过构造数据库集群提高负载能力往往需要高额的成本。
为了方便使用Terracotta搭建Tomcat集群,Terracotta提供了专门的插件tim-tomcat。下面将对集群的搭建进行详细描述。
4. 用Terracotta 2.7.3+Tomcat6.1搭建集群
下面我用两台局域网连接的计算机来搭建Tomcat集群环境,
我先介绍下我的环境: 我共用了2台pc,使用的是windowsXP环境,分别是:
pc1 ip:192.168.12.187 host name:guifangjun
pc2 ip:192.168.26.55 host name:itsm-dep
搭建具体步骤如下:
1) 准备工作
首先在每台机子安装以下软件,并设置系统环境变量:
* jdk1.6.0_ 13
* Apache Tomcat 6.1
* Terracotta 2.7.3
2) tc-config.xml配置
说明:TERRACOTTA_HOME指terracotta在本机的安装地址(本例的安装是地址是:D:\ Terracotta\terracotta-2.7.3)
首先,打开%TERRACOTTA_HOME%\samples\tc-config.xml 这个文件。修改<servers>和</servers>中间这部分代码如下:
<servers>
<server host="192.168.26.55" name="itsm-dep"> //定义pc1的host地址
<data>terracotta/demo-server/server-data</data>
<logs>terracotta/demo-server/server-logs</logs>
<statistics>terracotta/demo-server/server-statistics</statistics>
- <!--
<l2-group-port>9530</l2-group-port> //设置服务端口号,默认9520
-->
</server>
<server host="192.168.12.187" name="guifangjun"> //定义pc2的host地址
<data>data/server-data</data>
<logs>logs/server-logs</logs>
<!--
<l2-group-port>9530</l2-group-port>
-->
</server>
<ha>
<mode>networked-active-passive</mode> //设置active-passive模式为
<networked-active-passive>
<election-time>5</election-time>
</networked-active-passive>
</ha>
<update-check>
<enabled>true</enabled>
</update-check>
</servers>
我只列出了 servers 这个节点。你需要在两台机子上都修改。你可在%TERRACOTTA_HOME%\samples\这个目录下看到有个start-demo-server.bat bat文件。这个就是我们用来启动terracotta server的脚本。启动时他会调用我们修改的tc-config.xml这个文件。
然后,我们修改%TERRACOTTA_HOME%\tools\sessions\configurator-sandbox\tomcat6.0\tc- config.xml这个文件,其实跟上面的修改是一样的,,都是把servers 节点修改成和上一步一样。
3) 配置Tomcat应用服务器
%Tomcat_HOME%\bin目录下,创建一个startupTC.bat启动文件,文件内容如下:
//Terracotta安装路径
set TC_INSTALL_DIR=D:\Terracotta\terracotta-2.7.3
//tc-config.xml配制文件路径
set TC_CONFIG_PATH=D:\Terracotta\terracotta-2.7.3\samples\tc-config.xml
call %TC_INSTALL_DIR%\bin\dso-env.bat -q
set JAVA_OPTS=%JAVA_OPTS% %TC_JAVA_OPTS%
startup.bat
4) 所有配置完成,试运行
首先,在两台主机上分别执行%TERRACOTTA_HOME%\samples\start-demo-server.bat启动文件。
接着,分别执行%TOMCAT_HOME%\bin\startupTC.bat启动文件。
如果启动文件不报错,那就说明Terracotta服务器启动成功。
5) 测试failover和failback
首先在分别在两台机子上打开Administrator Console,路径是开始--》程序--》Terracotta2.4.3--》Administrator Console。打开之后你会开到如下图所示的界面:
最后我们测试下terrcatta server 的failover和failback:
首先停掉一个terrcatta服务,我们会看到下图:
红色应该表示itsm-dep这台机子上的terracotta server已经down掉了。而且2个tomcat都已经连到guifangjun这个server上了,他也变成active了(绿色)。表明 测试成功。