细说tomcat之集群session共享方案

1. Tomcat Cluster
官网:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
Tomcat原生支持的集群方案。

<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=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
    <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>

注意事项:
(1)系统必须允许广播,Tomcat通过广播机制传递session复制信息。
在实践中遇到的错误:

严重: Unable to start cluster.
org.apache.catalina.tribes.ChannelException: java.net.SocketException: 没有那个设备; No faulty members identified.

添加广播路由:route add -host 228.0.0.4 dev eth0(eth0为实际网卡名称)

[[email protected]_tomcat1 ~]# route -en
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
228.0.0.4       0.0.0.0         255.255.255.255 UH        0 0          0 eth2
192.168.70.0    0.0.0.0         255.255.255.0   U         0 0          0 eth2
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth2

(2)解决报错:java.net.NoRouteToHostException: No route to host (Host unreachable)
检查Tomcat集群内的主机防火墙是否开启,如果防火墙打开,需要允许4000端口访问(tomcat cluster使用4000进行集群内通信)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4000 -j ACCEPT
(3)Tomcat官方推荐只在小规模集群时使用。详见:https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

2. Hazelcast IMDG Plugins 开源版本插件
https://github.com/hazelcast/hazelcast-tomcat-sessionmanager#tomcat-based-web-session-replication
在测试用中发现该插件P2P模式时不稳定,经常会出现session不能及时同步的问题。

3. Redis方案
https://github.com/jcoleman/tomcat-redis-session-manager
采用Redis作为session存储方案,实现多实例session共享。

4.总结


根据实际生产环境集群规模选择恰当的方案。

【参考】
http://mp.weixin.qq.com/s/NnnqVrC9-Jekwy3Opmvy_w session一致性架构设计实践
http://5880861.blog.51cto.com/5870861/1671622 Tomcat集群问题记录
http://blog.csdn.net/q_l_s/article/details/52015296 tomcat - 报错 No such device; No faulty members identified.
https://wiki.apache.org/tomcat/FAQ/Clustering The cluster doesn‘t work under Linux with two nodes on two boxes.
https://hazelcast.org/ Hazelcast IMDG
https://hazelcast.org/plugins/?type=web-clustering  Hazelcast IMDG Plugins
http://blog.csdn.net/catoop/article/details/48603891  Tomcat7基于Redis的Session共享
http://www.cnblogs.com/lengfo/p/4260363.html 基于nginx tomcat redis分布式web应用的session共享配置

时间: 2024-12-26 02:33:06

细说tomcat之集群session共享方案的相关文章

Nginx+Tomcat+Memcached集群Session共享

提供给大家整合实例: http://download.csdn.net/detail/zld1987/9577962 cookie是怎样工作的? 例如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是"Michael Jordan",同时还对所创建的Cookie的属性如path.domain.expires等进行了指定. Set-Cookie:login=Michael Jordan;path

【转】Nginx+Tomcat+Memcached集群Session共享

cookie是怎样工作的? 例 如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名 是“Michael Jordan”,同时还对所创建的Cookie的属性如path.domain.expires等进行了指定. Set-Cookie:login=Michael Jordan;path=/;domain=msn.com; expires=Monday,01-Mar-99 00:00:01 GMT 上面这个H

Apache Tomcat 整合集群 session 共享

Apache Tomcat 整合集群 所需软件 CentOS6.5 64 Apache2.2.15 Tomcat7.0.62 JDK 1.8.0_45 tomcat-connectors 1.2.40 MySQL<可选> PHP<可选> 一   安装A服务器安装  IP  192.168.150.7 apache php mysql yum install httpd httpd-devel php php-devel php-gd php-mysql php-mbstring m

session服务器Nginx+Tomcat+Memcached集群Session共享

cookie是怎样工作的? 例如,我们创立了一个名字为login的Cookie来包含访问者的信息,创立Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是“Michael Jordan”,同时还对所创立的Cookie的属性如path.domain.expires等进行了指定. Set-Cookie:login=Michael Jordan;path=/;domain=msn.com; expires=Monday,01-Mar-99 00:00:01 GMT 下面这个Hea

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

Nginx+Tomcat7(tomcat6)+Memcached集群Session共享

Nginx+Tomcat7+Memcached集群Session共享 原理: 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对session的共享. 下载 1.      下载nginx 2.      下载tomcat7 (本文介绍的是tomcat7的session共享,如果是tomcat6,配置是不成功的,需要更换其中的jar包,m

Apache2.2 Tomcat7 集群 session共享 [windows]

Apache2.2  Tomcat7 集群 session共享 下载: Apache2.2.apache-tomcat-7.0.42.zip.tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip[mod_jk] 分别解压缩Apache2.2.apache-tomcat-7.0.42.zip.tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip 此处:C:\Apache2.2.C:\tomc

Tomcat自带的Session共享方案实施记录

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上,从而就找不到session以至于最终导致请求失败.要实现tomcat session共享有多种方案,今天介绍下使用tomcat自带的cluster方式,在多个tomcat节点间自动实时复制session信息,配置起来很简单.tomcat自带的这种session共享方案,对于规模较小的tomcat集群来说够用了,但这个方案的效率比较低,在大并发下表现并

160512、nginx+多个tomcat集群+session共享(windows版)

第一步:下载nginx的windows版本,解压即可使用,点击nginx.exe启动nginx 或cmd命令 1.启动: D:\nginx+tomcat\nginx-1.9.3>start nginx或D:\nginx+tomcat\nginx-1.9.3>nginx.exe注:建议使用第一种,第二种会使你的cmd窗口一直处于执行中,不能进行其他命令操作. 2.停止: D:\nginx+tomcat\nginx-1.9.3>nginx.exe -s stop或D:\nginx+tomca