Tomcat6.0的负载均衡(Apache2.2)与集群配置
这两天尝试了一下Tomcat的负载均衡以及集群配置,小可不才斗胆记录如下,网上好多都是先配lb再配集群滴,小子反其道而行先配集群吧,首先声明这个与手把手或者从零开始系列不太粘边只提供一个配置过程及思想,纯拿来主义在这可能不太灵光。后续在理解好这些原理后可能会再谈谈自己的心得,欢迎各位大牛参观指导^_^~
1、环境列表
- 电脑一枚(各位看官,这个真不能算废话啊)Win7
?
2、软件包列表(注意都是Win版x86系列的包哟)
- Apache 2.2相当于一个代理服务器,所有请求先经过apache服务器后分发给各Tomcat实例进行处理。很好理解~Tomcat 6.0.32注意:之前使用6.0.20版本,在配置集群的时候多播总是有问题,相同配置改在6.0.32中就没问题了解压3份,分别重命名为tomcat1、tomcat2、tomcat3(这个你想解几个就解几个,取三为多的意思)注意修改3个Tomcat实例conf/server.xml文件,把相应的端口号修改一下以免冲突哟。(小子把tomcat1上的所有端口都加上1前缀了,如8080变成18080,方便记忆识别嘛,以此类推~)tomcat-connectors-1.2.32-windows-i386-httpd-2.2.x (JK_MOD)apache modules,lb就是用介个模块来搞滴JMeter 2.4用于自动化的测试、当然除此之外还是有些手工的测试Eclipse Indigo用于编写测试webapp,喜欢用什么ide就用什么吧^_^
?
3、编写测试代码
编写测试代码的目的是便于观察配置是否成功,1)直观识别出请求被负载均衡到不同的Tomcat实例中;2)同一Session是否被分配到同一Tomcat实例处理,Session能否在集群中共享;3)当集群中某一Tomcat实例意外down机后,请求能否透明分配给另一Tomcat实例进行处理。
最关键的就是如何直观识别出请求被哪个Tomcat实例处理,我采用的比较懒的解决方案:Servlet在接到请求后在终端System.out.print当前Session的属性。
代码实在拿不出手,只得琵琶半遮面了,主要是直观标识出session及相应属性:
?
4、配置集群
参考材料:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
官方的HowTo里解释的很详细了,在6.0.32版本上,我所做的只是简单打开3个Tomcat实例配置文件中Cluster元素的注释而已。(由于Cluster元素有默认配置,介个可以参考howto里给出的内容,所以完全没有必要再手工给出详细的配置^_^)此处,集群各Tomcat实例的Receiver端口会自动检测4000-4100端口值并完成分配的,所以也不需要额外进行手工配置,好吧,再贴点代码片断:
?
?