运维菜 2017-11-21 21:34:43
前言
=====
在多个tomcat集群中,session共享就是必须,不然前端nginx转发过来不知道之前请求在哪台,就找不到session,导致请求失败。
下面是tomcat自带的session共享的例子,对于小集群够用了,大集群还是建议使用redis或者memcache进行共享。
安装apache-tomcat比较简单可以参照:tomcat-你会怎么部署多个tomcat?
集群配置:
在conf/server.xml文件中找到这行:
在这行下面配置集群配置信息就可以了,如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/opt/tomcat/tmp/war-temp/"
deployDir="/opt/tomcat/tmp/war-deploy/"
watchDir="/opt/tomcat/tmp/war-listen/"
watchEnabled="false"/>
记得多个tomcat都需要配置,同一个集群里面配置信息保持一直就可以了。如果是其他集群,修改一下address就好了。
test1 SessionID is <%=session.getId()%>
SessionIP is <%=request.getServerName()%>
SessionPort is <%=request.getServerPort()%>
<% out.println("Response from tomcat1"); %>
nginx上面默认配置是轮询的,请求会依次分发。
第一次访问:
第二次访问:
可以发现两次访问获取到的sessionid是一样的,但是Response是不同的tomcat。
之前公司业务访问量比较少就是用这种方式进行session共享,但是后面业务增长大了,发现session共享会使机器的负载增大,所以还是用redis或者memcache,效率比较高。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章