第二次写关于Apache + tomcat 实现负载均衡的文章。这篇为第二篇。只为让自己长个记性发现第一次的错误。
不知道有没有看我blog的人按照第一次的配置的方式去实现apache+tomcat,如果有人用了肯定就会有问题,因为那个配置可以实现负载均衡。
但是session的复制应该会出现问题。今天我闲来无事想尝试下mod_proxy的配置方式。但是还没搞的时候发现原来的mod_jk的配置方式session复制有问题又重新
解决了下。现在记录于此。
1.我用的是tomcat7.如果想要实现session的复制需要将tomcat conf中得server.xml进行修改。放开此段注释。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
2.在我上篇文章的基础上修改 workers.properties文件为现有形式:
#===========controller,负载均衡控制器====
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session_force=1
#1为 true 0 为false
worker.controller.sticky_session=0
此处在详细解答下这个sticky_session的0和1的区别。
这个区别就是,当sticky_session=1的时候假如服务器A接受了请求,以后得请求都会发送给A,不会轮询
当sticky_session=0的时候假如A服务器接受了请求,按F5再次刷新结果到了B服务器,再按一次又到了C服务器,会话会轮询。
# sticky_session请求是发送给一台服务器1,还是多台服务器0。session的复制只与tomcat集群配置有关。
但是经过我的测试发现,当我此属性设置为1的时候这个时候我访问localhost/test/test.jsp 访问到tomcat1上,再次新开浏览器
访问同样的路径然后分配到tomcat2上,这个时候我将tomcat1关闭,在浏览器1上刷新这个时候就会报错。如果这样就没有起到
作用,所以个人认为,这里还是应该配置成0,这样,当你的一个tomcat挂掉的时候他会轮询到别的tomcat上,而且还携带着你的session信息。
这篇应该算是答疑,希望配置中出现问题的朋友也研究讨论下。看看明天有时间搞下mod_proxy的形式,因为现在mod_jk的形式已经淘汰了。