[转]通过 Terracotta实现基于Tomcat的Web应用集群
<web-applications>
????? <web-application>my_web_app1</web-application>
????? <web-application>my_web_app2</web-application>
</web-applications>
您可能还需要修改Terracotta服务器的信息。比如:
把配制好的tc-config.xml文件拷贝到所有机器上。然后在每一台机器上,进入TERRACOTTA_HOME目录,运行:
如果能看到上述信息,说明Terracotta和Tomcat都正常启动,并且已经与Terracotta服务器成功建立了连接。
集群启动后,我们可以利用Tomcat内置的Web应用examples来验证集群是否成功配置好。
比如有两台Tomcat服务器分别为http://192.168.0.101:8080和http://192.168.0.102:8080。
首先启动dev-concole.sh(Unix)或dev-console.bat(Windows),连接到Terracotta服务器上。您可以看 到所 有Tomcat节点都显示在Connected Clients中。另外在Object Browser中可以看到一个共享数据:
tc:session_localhost/examples
说明所有session已经被共享到Terracotta服务器上了。
下面把浏览器指向:
http://localhost:8088/examples/jsp/cal/login.html
输入姓名和EMail。点击Submit进入下一级页面。
这时您可能会看到服务器抛出com.tc.exception.TCNonPortableObjectError异常。仔细查看异常信息会发现原来该例 子程序所需的一些类没有包含在tc-config.xml的instrumented-classes配置中。因此需要打开tc-config.xml配 置文件,把如下配置添加到<application><dso>中:
重新启动Tomcat。再打开前面的页面。
您可能还会遇见TCNonPortableObjectError,不过这次的错误是有关boot jar的:
只要认真阅读错误信息,按照提示的方法配置tc-config.xml文件,然后执行下面的命令重新生成boot jar文件,再重新启动Tomcat就可以了:
$TERRACOTTA_HOME/bin/make-boot-jar.sh -f $TOMCAT_HOME/tc-config.xml
处理完上述问题后,例子程序中会显示一个日历管理系统。您可以在里面配置一天的工作日程。
在第一台Tomcat服务器上配置好一天的日程,然后到第二台服务器上,打开相同的页面,您会看到前面输入的日程已经显示出来了。您还可以试着在第二台服 务器上对日程进行修改,再到第一台上面刷新页面,前面的修改也会立即显示出来。这说明两台Tomcat服务器的session信息已经完全同步了。
1. 如果启动失败,有可能是JAVA_OPTS没有配置好。
可以尝试在startupTC文件中,在set JAVA_OPTS后面打印出JAVA_OPTS的内容。应该看到类似下面的内容:
2. 如果遇见TCNonPortableObjectException异常,说明在Session中共享的类没有包含在tc-config.xml的 instrumented-classes配置中。一般在异常新吸力面Terracotta会包含需要添加到配置文件中的信息,比如:
只要按照提示把配置信息放到tc-config.xml文件中,然会从新启动Tomcat即可。
?
????? 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.
?<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>