问题描述
楼主有个生产环境,有3台服务器,以下简称为A/B/C,上面建了A/B/C三个node节点,IHS和DM也部署在A上,只有1个IHS,简单的1拖3架构。建了1个水平集群,3个SERVER分布在3个node上。SERVER配置只改动了JVM大小、webcontainer大小、JVM日志、cookie名(每个server不一样),其他均未改动。IHS只改动了maxclients,其他未改动。IHSPLUGIN均为默认配置,未改动。楼主碰到的问题:有个应用,登录的时候会把一些信息存储到SESSION中,紧接着的后一个请求再取出来用。但是生产环境出现了下一个请求有时候会取不到上一个请求保存的SESSION的情况,概率较小。进一步测试,如果把aserver关掉,只留b/cserver,取不到SESSION的情况概率大大增加,可以达到50%。而如果aserver是开着的,貌似请求大部分都发给了aserver处理。把IHSPLUGIN的日志调整为DEBUG级别,跟踪后发现了以下规律:1)如果上一个请求是b/cserver响应的,下一个请求却发给了a,于是就出现了取不到SESSION的情况。PLUGIN-IN日志记录:DEBUG:ws_server_group:NewserverGroupNextRoundRobinServer:RoundRobinloadbalancing;(采用RR)2)如果上一个请求是aserver响应的,下一个请求基本上都还是交给a处理。PLUGIN-IN日志记录:DEBUG:ws_common:websphereParseCloneID:Parsingcloneidsfrom0000HYWoVdhHX4hteSmeTGkOCCz:1a854qhjl;(sessionAffinity)3)PLUGIN里面记录的统计信息如下,可以看到只有a1有affinityRequest,并且a1响应了绝大部分请求。STATS:ws_server:serverSetFailoverStatus:ServerNode134_cluster2_server_a1:pendingRequests0failedRequests0affinityRequests997totalRequests1026.STATS:ws_server:serverSetFailoverStatus:Serverhrac1Node01_cluster2_server_b1:pendingRequests0failedRequests0affinityRequests0totalRequests5.STATS:ws_server:serverSetFailoverStatus:Serverhrac2Node01_cluster2_server_c1:pendingRequests0failedRequests0affinityRequests0totalRequests35.从以上测试结果来看,aserver有sessionaffinity效果,只要一开起来,会把压力都集中到这台上面。b/cserver没有sessionaffinity效果,请求分发采用随机轮询,就可能会出现下一个请求取不到上个请求保存的SESSION的问题。查看plugin-cfg.xml,看到它配置了AffinityCookie="cluster2_a1",不过并没有其它两个session:cluster2_b1/cluster2_c1的配置。也就是说,只有cluster2_a1朿sessionAffinity,而其它cluster2_b1/cluster2_c1却没有。<UriGroupName="default_host_cluster2_URIs"><UriAffinityCookie="cluster2_a1"AffinityURLIdentifier="jsessionid"Name="/cm/*"/></UriGroup>如果我把cluster2_b1/cluster2_c1两个cookie也都添加到上面的affinityCookie配置里面,仍然只有cluster_a1有affinity效果。总结问题:WAS为什么只给a1赋予了AffinityCookie,而其它两个没有?这样子不是会负载失衡吗?有没有什么办法可以使皿3个server都有Affinity效果。