loading

运维

Tomcat-自带的简单session共享,小集群适用

namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

前言
在多个tomcat集群中,session共享就是必须,不然前端nginx转发过来不知道之前请求在哪台,就找不到session,导致请求失败。
Tomcat-自带的简单session共享,小集群适用
下面是tomcat自带的session共享的例子,对于小集群够用了,大集群还是建议使用redis或者memcache进行共享。
例子
Tomcat-自带的简单session共享,小集群适用
安装apache-tomcat
集群配置:
在conf/server.xml文件中找到这行:

<Engine name="Catalina" defaultHost="localhost">

在这行下面配置集群配置信息就可以了,如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<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"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<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"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

记得多个tomcat都需要配置,同一个集群里面配置信息保持一直就可以了。如果是其他集群,修改一下address就好了。
测试页面

<html>
<head>
<title> test1</title>
</head>
<body>
SessionID is <%=session.getId()%>
<BR>
SessionIP is <%=request.getServerName()%>
<BR>
SessionPort is <%=request.getServerPort()%>
<%
out.println("Response from tomcat1");
%>
</body>
</html>

nginx上面默认配置是轮询的,请求会依次分发。
第一次访问:
Tomcat-自带的简单session共享,小集群适用
第二次访问:
Tomcat-自带的简单session共享,小集群适用
可以发现两次访问获取到的sessionid是一样的,但是Response是不同的tomcat。
总结
之前公司业务访问量比较少就是用这种方式进行session共享,但是后面业务增长大了,发现session共享会使机器的负载增大,所以还是用redis或者memcache,效率比较高。

(1)

本文由 podipod软库网 作者:Anonymous 发表,转载请注明来源!

关键词:,
全国计算机等级考试题库

热评文章

发表评论