一、前言:
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个时候,整个集群的吞吐量还一直是线性增长的。
d:terracotta服务器
172.16.7.10 realserver01
172.16.7.11 realserver02
e:tomcat服务器(也是terrocatta客户端)
172.16.7.13
172.16.7.14
e: lvs服务器172.16.7.2 lvs-server01
<tc:tc-config xmlns:tc="http://www.terracotta.org/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-4.xsd">
<servers>
<server host="172.16.7.10" name="realserver01">1:networked-active-passive(网络)
2:disk-based-active-passive(磁盘)
election-time- 心跳检查间隔,单位秒,默认值5
--></servers>
</tc:tc-config>
将terracotta下的 C:\Program Files\Terracotta\terracotta-3.6.1\sessions\terracotta-session-1.2.1.jar
C:\Program Files\Terracotta\terracotta-3.6.1\common\terracotta-toolkit-1.4-runtime-4.1.0.jar
复制到tomcat中的lib文件夹下。
C:修改/conf/context.xml 文件,如下:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="org.terracotta.session.TerracottaTomcat60xSessionValve" tcConfigUrl="172.16.7.10:9510,172.16.7.11:9510"/>
</Context>
D:分别在tomcat服务器上创建新的tomcat启动脚本(在tomcat安装目录的bin下创建TCstartup.bat)
内容如下:
set TC_INSTALL_DIR=C:\"Program Files"\Terracotta\terracotta-3.6.1
set TC_CONFIG_PATH=C:\"Program Files"\Terracotta\terracotta-3.6.1\bin
call %TC_INSTALL_DIR%\platform\bin\dso-env.bat -q
set JAVA_OPTS=%JAVA_OPTS% %TC_JAVA_OPTS% -Xms128m –Xmx512m
pause
startup.bat
E:分别启动两台terracotta服务器
节点:realserver01上:
cd C:\Program Files\Terracotta\terracotta-3.6.1\bin
start-tc-server.bat –f tc-config.xml –n realserver01
start-tc-server.bat –f tc-config.xml –n realserver02
转载于:https://blog.51cto.com/bbhaiidreamer/841817