1.现象描述某应用采用集群方式部署,两个被管server承载应用分别部署在两台windows服务器上,AdminServer和ProxyServer与Server1部署在一台服务器上,Server2部署在另一台服务器上,负载均衡与请求转发由WebLogic自带应用程序ProxyServer负责。 当前用户反映登录一段时间后(明显没有到达session超时上限3600秒)就被系统踢出又要重新登录,而且一段时间后又要重新登录。之后应用由存储用户状态在session中改为存储在cookie中问题得以缓解。
2.问题分析 一般情况下在没有session超时用户是不用重新登录系统的,发生当前情况由于session信息没有被正常保存所致,而当前系统应用采用的是集群方式,如果session复制出现问题一样会导致用户重新登录的问题,会话复制失败通常是因为组播/网络问题引起的。有时候,配置问题也会导致失败,此外,请确保输入到会话中的数据必须是可序列化的,否则复制可能会失败。
经过排查发现,当前采用集群方式并未配置session复制方式,即没有在WebLogic.xml中配置session复制模块。发现当前应用的WEB-INF目录下(web.xml同目录下)根本没有WebLogic.xml配置文件。
3.解决办法 在应用的WEB-INF目录下(web.xml同目录下)添加WebLogic.xml配置文件,并编辑如下:
在session-descriptor 几点下添加session复制存储方式。修改后通过一段时间的监控没有发现用户再重新登录的问题出现。