当前位置: 首页 > 工具软件 > Terracotta > 使用案例 >

Terracotta学习文档

陈茂
2023-12-01

 

Terracotta

学习文档

 

 

 

 

  



1.  引言

本学习文档主要介绍了Terracotta基本原理和如何配置TomcatTerracotta服务器将普通的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_HOMEterracotta在本机的安装地址(本例的安装是地址是: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 failoverfailback

       首先停掉一个terrcatta服务,我们会看到下图:

红色应该表示itsm-dep这台机子上的terracotta server已经down掉了。而且2tomcat都已经连到guifangjun这个server上了,他也变成active了(绿色)。表明 测试成功。

 类似资料: