Tomcat5.X的集群部署
最近在做的系统是采用集群方案,所以有关这方面的工作前段时间也做了不少了,目前已经差不多完成了,呵呵,所以把一些相关的经验跟大家分享下.
1.集群系统说明
对于大在线量和高访问量的WEB应用系统而言,web集群的部署是必须的,而且也是必要的。针对Tomcat5.X系列的web应用服务器的集群,通常是分为两个部分,一个是访问负载,一个就是SESSION复制或同步。第二步不是必须的,但是有时候是必要的,关键是要看负载是采用什么样的策略了。比如采用stick session策略,那么同一个用户的所有请求都由一个Tomcat实例来服务,那么也就不需要session复制了,但是同时也缺少了failover的能力。我们今天主要讲的就是Tomcat的session复制功能的相关配置,至于访问负载等相关方面请参看LVS的集群配置等文档。
2.Tomcat集群配置
Tomcat的简单集群配置步骤如下:
1)修改conf/server.xml配置文件
1.1找到Engine标签,加入属性:jvmRoute="node1",其中node1表示节点的名称;
1.2找到Cluster标签,去掉其注释。同时修改tcpListenAddress为本机的IP地址(非127.0.0.1的回路地址)
2)配置web应用
在conf\Catalina\localhost目录下建立一个ROOT.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="应用目录" privileged="true" antiResourceLocking="false" antiJARLocking="false" />
注意ROOT.xml是tomcat默认的应用名称,这样我们就可以不加context来限制路径进行访问了。
3)修改应用的web.xml文件
修改你的web应用WEB-INF目录下的web.xml文件,加入标签:
<distributable />
这个是tomcat进行session复制所必须的,否则session不能进行复制!
Tomcat的集群配置简单的配置如上就可以正常运行了,注意如果是在同一台机器上配置多个tomcat实例来进行集群的测试,那么请一定要注意tomcat实例运行的端口和集群所监听的端口是否冲突!
3.Tomcat集群的前提和疑难
1)用户存入SESSION中的数据的问题
使用tomcat集群进行SESSION复制,必须要保证你的session中存放的所有对象都是实现了java.io.Serializable接口的,因为session复制就是序列化对象到其他WEB应用服务器上的,所以如果没有实现该接口,那么SESSION同步将会失败。另外一点,就是如果要同步的机器比较多的话,那么要注意保证SESSION中存放的数据比较小,不要什么都存放到SESSION中,因为复制SESSION也是需要开销的,数据越大开销也越大。
2)Tomcat执行SESSION复制的触发条件
我们在tomcat的server.xml文件中集群部分cluster标签中可以看到属性:useDirtyFlag,如果这个设置为true(默认的),那么只有当使用setAttribute往session中设置数据的时候才会同步其他WEB服务器的SESSION,如果为false,那么每一次请求的sesison都会被同步到其他服务器上。因此在操作SESSION的时候要特别注意,避免出现SESSION无法同步的问题。
举个简单的例子,比如我们在单机应用情况下修改SESSION中用户的某一个数据,那么通常就是:
User user = (User)request.getSession().getAttribute(“user”);
User.setName(“my name”);
这样我们就是直接存取出来,然后进行修改,虽然在单机情况下没有问题,但是在集群条件下,这样就导致了多台WEB服务器上的SESSION不同步的问题,因为SESSION并没有改变,Tomcat无法监视session中某个数据的值是否发生了变化。因此,我们还需要执行如下操作以保证SESSION的同步:
Request.getSession().setAttribute(“user”, user);
所以,我们在操作SESSION的时候要特别注意!另外的建议就是,我们应该尽可能的不要修改SESSION中的数据。
3)Linux下的组播问题
因为Tomcat的SESSION复制通信是通过组播功能来实现不同服务器之间的交互的,所以需要在服务器上开通组播功能,而Linux系统下默认是没有开通的,我们需要通过如下命令来开通其组播功能:
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
在windows下默认是开通组播的,所以无须做改变。
这里只是简单列出了一些主要的配置和相关需要注意的地方,更多和更深入的配置请参考Tomcat的官方文档和配置文件的注释!

浙公网安备 33010602011771号