- 测试环境
web server:apache-tomcat-8.0.18
Jdk:1.8
操作系统:Windows7
- Apache下载及配置(免安装版)
找到Apache下conf目录中httpd.conf文件,进行以下调整:
#Define SRVROOT "/Apache24" 》Define SRVROOT "D:/MyTest/tomcat_cluster/Apache24" #指向安装目录
安装Apache主服务,管理员权限打开cmd,执行:httpd.exe -k install -n Apache24 ,Apache24为服务名可自定义
安装位置bin目录下双击ApacheMonitor.exe,打开界面窗口,选择服务,点击start开启服务
浏览器访问http://localhost,出现“IT WORKS”界面。 默认监听80端口,被占用无法启动
服务卸载,管理员权限打开cmd,执行:sc delete Apache24
- tomcat集群配置
单机测试需要更改tomcat端口号,避免端口冲突
在Engine标签内添加jvmRoute属性,自定义节点名称,例如:tomcat1
将Cluster标签注释打开
- Apache与tomcat集成
引用
http://blog.csdn.net/navy_xue/article/details/39030879
首先要在httpd.conf引入配置文件:
#include conf/mod_proxy_balancer.conf
include conf/mod_jk.conf
mod_proxy_balancer.conf
#AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded?? LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #AH02432: Cannot find LB Method: byrequests LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so以上为mod_proxy_balancer方式的配置文件,需要加载所需的.so支持模块。前两个模块的注释为测试时遇到的错误发现需要增加的模块支持。Proxy balancer中支持ajp、http两种方式,建议ajp,两者对比分析:BalancerMember ajp://127.0.0.1:6009 loadfactor=3 BalancerMember ajp://127.0.0.1:7009 loadfactor=1 #BalancerMember http://127.0.0.1:6080 loadfactor=3 #BalancerMember http://127.0.0.1:7080 loadfactor=1 ProxyPass / balancer://testCluster/
引用
http://dmouse.iteye.com/blog/1354527
mod_jk.conf
#加载mod_jk Module LoadModule jk_module modules/mod_jk.so #指定workers.properties文件路径 JKWorkersFile conf/workers.properties #指定请求交给tomcat处理,"controller"为在workers.propertise里负载分配控制器 JKMount /* controllermod_jk.so为依赖的模块,都说在Apache官网上下载,没有找到。网上下了个,见附件。
JKMount /* 分流所有请求,可调整通配符分流指定请求,例如:/*.action
workers.properties
worker.list=controller,tomcat1,tomcat2 worker.tomcat1.port=6009 #ajp13 端口号 worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多 worker.tomcat2.port=7009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 worker.controller.type=lb worker.controller.balance_workers=tomcat1,tomcat2 #指定分担请求的tomcat worker.controller.sticky_session=false配置了两个tomcat节点,节点名称分别为tomcat1、tomcat2,对应tomcat陪住中的jvmRoute。
sticky_session设置注意点,未验证
引用
worker.controller.sticky_session,设置为1或true使用粘着session,设置为0或false不使用粘着session。如果sticky_session设为true时,建议sticky_session_force设为false,此参数表明如果集群中某台服务器在多次请求没有响应后,将转发当前的请求到其它服务器上处理;sticky_session=false时,影响比较大,会导致转发到其它服务器上的请求,找不到原来的session,所以如果此时请求中有读取session中某些信息的话,就会导致应用的null异常。sticky_session、sticky_session_force的默认值分别为true,false。
sticky_session sticky_session_force 含义
true false SESSION会复制,有粘性
true true SESSION不复制,有粘性
false false SESSION会复制,无粘性
false true SESSION会复制,无粘性
原文地址: http://www.linuxidc.com/Linux/2012-02/53270.htm
sticky_session sticky_session_force 含义
true false SESSION会复制,有粘性
true true SESSION不复制,有粘性
false false SESSION会复制,无粘性
false true SESSION会复制,无粘性
原文地址: http://www.linuxidc.com/Linux/2012-02/53270.htm
- jeesite项目集成测试
分布式环境下需要实现session共享,jeesite自身提供ecache共享方案,切换ehcache-local为ehcache-rmi,只需要更改配置文件jeesite.properties中参数ehcache.configFile的路径为cache/ehcache-rmi.xml
ecache集群同步方案有Terracotta、RMI、JMS、JGroups、EhCache Server,本文中使用RMI,实际生产环境下可以使用EhCache Server搭建独立的缓存服务器
在实际测试时,每次切换节点shiro自定义的sessionid都会变好,花费了我很多时间,快奔溃了,各种查资料、看shiro源码。也猜测过可能是cache同步的问题,简单做了下测试,发现有进行同步。又去查其它的问题,走了很多弯路,最后发现还是cache的问题。jeesite下默认的ehcache-rmi.xml配置是需要进行调整的,activeSessionCache监听工厂的参数replicateAsynchronously=true、replicateUpdatesViaCopy=false需要调整,调整replicateAsynchronously=false、replicateUpdatesViaCopy=true,或者replicateUpdatesViaCopy=true、asynchronousReplicationIntervalMillis=200。原因在于cache节点间异步复制有时间间隔,切换节点时可能复制未完成。因此,应根据cache实际应用场景采用同步复制或者异步复制,异步复制时应注意间隔时间。
但在实际测试时,不关是同步,还是调整复制间隔时间,都存在登录瞬间切换节点获取不到cache的情况。但是使用nginx没有问题,没发现与apache的差异在哪里。当然,现在nginx用的比较多,ehcache也有更好的替换方案
- 参考资料
引用
http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/
一个项目两个web模块会导致shiro的session污染
引用
https://segmentfault.com/q/1010000004520305
Shiro用ehcache缓存session,关于JSESSIONID失效报错问题
引用
http://blog.csdn.net/caimengyuan/article/details/52526765
Tomcat集群配置
引用
http://blog.csdn.net/yipanbo/article/details/44079083/
http://www.tuicool.com/articles/zmMVRzF
http://www.tuicool.com/articles/zmMVRzF