tomcat7集群(session复制)
2016-08-09 16:15
423 查看
tomcat集群的主要方法有三种:
1、采用粘性会话,即某个ip只会访问集群中的某一台机器,这样就可以简单的解决session共享的问题;
2、采用会话共享,目前网上较多的案例是使用memcahed作为共享容器,需要开发以memcahed作为容器的会话管理器,然后配置到tomcat中。
3、采用session复制技术,tomcat本身已支持该功能。
三种方案各有优缺点。第一种存在部分单点问题,如果某台机器崩溃,在此机器的会话将丢失,其他的不受影响;第二种需要额外安装共享容器,如果一台tomcat崩溃,会话仍然可用,但如果会话容器崩溃的话,所有会话都会丢失。对于memcahed,可采用memcached集群方案;第三种方案是tomcat官方介绍的方案,个人感觉只有这个方案真正做到了集群,任何一台tomcat崩溃都不会产生影响,因为是完全备份,这个方案会消耗更多内存和带宽,tomcat官方推荐在集群比较小时采用此方案。
本文介绍第三种方案,参考http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
在配置文件server.xml的<Engine>或者<Host>添加如下代码
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
这行配置的默认配置如下:
<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="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
</Cluster>
tomcat集群用的是组播技术,主要需要注意的配置是Membership和Receiver。Membership是组播组,Receiver是接收方。
228.0.0.4是组播地址,这是一个保留地址,关于组播地址,可以查看相关文档。port是端口(可以把Membership当作服务端,Receiver当作客户端,这样就比较好理解)。同一个集群下的机器要加入相同的组播组,所以同一个集群下的tomcat的Membership是一样的。Receiver是接收组播信息的配置,如果两个tomcat在同一个机器,Receiver的port要不相同。如果在不同的机器Receiver的address最好改成ip,如果使用auto,他的值很可能是127.0.0.1,这样会导致接收不到消息。另外,要将Membership和Receiver的端口加入到防火墙中,不然也会无法访问
最后项目的web.xml中需加入<distributable/>以支持集群
1、采用粘性会话,即某个ip只会访问集群中的某一台机器,这样就可以简单的解决session共享的问题;
2、采用会话共享,目前网上较多的案例是使用memcahed作为共享容器,需要开发以memcahed作为容器的会话管理器,然后配置到tomcat中。
3、采用session复制技术,tomcat本身已支持该功能。
三种方案各有优缺点。第一种存在部分单点问题,如果某台机器崩溃,在此机器的会话将丢失,其他的不受影响;第二种需要额外安装共享容器,如果一台tomcat崩溃,会话仍然可用,但如果会话容器崩溃的话,所有会话都会丢失。对于memcahed,可采用memcached集群方案;第三种方案是tomcat官方介绍的方案,个人感觉只有这个方案真正做到了集群,任何一台tomcat崩溃都不会产生影响,因为是完全备份,这个方案会消耗更多内存和带宽,tomcat官方推荐在集群比较小时采用此方案。
本文介绍第三种方案,参考http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
在配置文件server.xml的<Engine>或者<Host>添加如下代码
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
这行配置的默认配置如下:
<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="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener">
</Cluster>
tomcat集群用的是组播技术,主要需要注意的配置是Membership和Receiver。Membership是组播组,Receiver是接收方。
228.0.0.4是组播地址,这是一个保留地址,关于组播地址,可以查看相关文档。port是端口(可以把Membership当作服务端,Receiver当作客户端,这样就比较好理解)。同一个集群下的机器要加入相同的组播组,所以同一个集群下的tomcat的Membership是一样的。Receiver是接收组播信息的配置,如果两个tomcat在同一个机器,Receiver的port要不相同。如果在不同的机器Receiver的address最好改成ip,如果使用auto,他的值很可能是127.0.0.1,这样会导致接收不到消息。另外,要将Membership和Receiver的端口加入到防火墙中,不然也会无法访问
最后项目的web.xml中需加入<distributable/>以支持集群
相关文章推荐
- Tomcat集群session复制,httpd/nginx反代Tomcat集群
- nginx + tomcat 集群配置详解, 实现负载均衡 URLRewrite Session复制
- nginx+tomcat的集群和session复制
- Tomcat集群和Session复制应用介绍
- Apache2.2+Tomcat6配置集群、负载均衡、session复制随笔
- nginx+tomcat集群负载均衡(实现session复制)
- windows下nginx+tomcat集群,实现session复制共享
- apache2.2.x+tomcat7.0.x集群+session复制
- apache2.2.x和tomcat6.0.32集群并实现session复制功能
- 方案三:APACHE(proxy) + TOMCAT(session复制)兑现高可用网站或管理系统集群
- Jboss4集群配置之五:Jboss集群session复制
- weblogic集群session复制
- centos下搭建nginx+tomcat实现集群负载与session复制
- Tomcat 5集群中的SESSION复制
- Tomcat7通过redis 来进行session复制的设置过程(jcoleman/tomcat-redis-session-manager)
- 配置WebLogic Server 11g 集群、Session复制(Windows)
- jboss eap 6.3 集群(cluster)-Session 复制(Replication)
- JBoss安装,集群配置,负载均衡和session复制配置
- nginx+tomcat实现集群负载均衡(实现session复制)
- Tomcat集群session复制与Oracle的坑。。