打开tomcat的配置文件conf/server.xml,在主机Host元素中加入如下配置:
<!-- 集群配置 --> <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服务,有规律的发送脉冲广播 --> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <!-- receiver组件,用于从其他成员接收复制的数据信息 --> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.137.211" port="4001" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <!-- sender组件,用于给组中其他成员发送复制的数据信息 --> <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> <!-- 过滤器,过滤了任何对静态页面、图形、js的请求,这些请求不会修改会话 --> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/> <!-- 过滤器,同mod_jk一起使用,在故障转移期间保证会话的粘性 --> <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的server.xml都做如上配置
注意事项:
1、无论Apache中是使用mod_jk还是使用mod_proxy,都应该关闭sticky session,如果是mod_proxy,还需要将nofailover属性的值置为Off,以下示例使用mod_proxy配置
2、tomcat的引擎Engine元素的jvmRoute属性去掉,如果加上,属性值会附加在session id的末尾,造成两次请求session id由于属性值不同而不同
3、两台tomcat的server.xml配置文件,Receiver元素的address属性值是不一样的,都是本机的ip
4、确保两台tomcat的4001端口是打开的,tomcat广播通信需要用到该端口,如果防火墙关闭了了该端口的访问,会出现如下问题
skipping state transfer. No members active in cluster group.
WARNING: Error receiving mcast package. Sleeping 500ms
java.net.SocketException: Socket closed
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:145)
at java.net.DatagramSocket.receive(DatagramSocket.java:725)
at org.apache.catalina.tribes.membership.McastServiceImpl.receive(McastServiceImpl.java:314)
at org.apache.catalina.tribes.membership.McastServiceImpl$ReceiverThread.run(McastServiceImpl.java:414)
5、应用程序shade的web.xml中需要加入distributable元素
依次启动tomcat、Apache,分别用Firefox和chrome浏览
目前火狐中的请求被211这台机器处理
刷新下页面
发现请求被243这台tomcat处理了,但是session id并没有改变
关闭211机器上的tomcat,继续刷新页面,重复刷几次,发现请求都是被243处理,session id并没有改变
至此,使用内存同步方式配置session同步已经完成,但是,tomcat默认的session存储策略是存储在文件系统中,对于一些高并发的系统,这往往会限制系统的相应时间。
相关推荐
Apache和Tomcat的组合经常被用来搭建这样的架构,特别是在实现负载均衡和集群时。在这个场景中,session同步是一个核心问题,因为用户session数据的正确管理和共享是保持应用程序一致性和用户体验的关键。本文将深入...
Apache+Tomcat+Linux集群和均衡负载(Session同步复制
3. JK模块:Apache的 mod_jk 模块,用于连接Apache和Tomcat,实现负载均衡。 配置步骤如下: 1. **安装Apache和Tomcat**:从官方站点下载Apache和Tomcat的Windows版本,并按照常规步骤进行安装。同时,下载JK模块...
NULL 博文链接:https://ywu.iteye.com/blog/2246306
【Apache+Tomcat 集群与负载均衡及Session...通过以上配置,Apache+Tomcat集群可以实现高效的负载均衡和高可用性,同时通过Session绑定确保用户会话的连续性。注意定期监控和优化集群性能,以应对不断变化的业务需求。
对于基于内存的session复制,Tomcat可以通过`org.apache.catalina.ha.session.DeltaManager`作为session manager,但这种方式需要所有Tomcat实例之间进行实时同步,网络负担较大。另一种方法是利用Nginx的sticky模块...
"tomcat9+tomcat-cluster-redis-session-manager_4.0.zip"这个文件组合涉及到的是在Tomcat 9上实现负载均衡以及使用Redis作为Session管理器的高级配置。 首先,Tomcat 9是Apache Tomcat服务器的一个版本,它是Java ...
这篇文章将详细介绍如何使用Apache作为前端负载均衡器,与多台Tomcat服务器配合构建集群环境。 首先,我们要理解负载均衡的基本概念,它是一种技术,通过分散网络流量到多个服务器,避免单一服务器过载,从而提高...
而Tomcat集群则使得多个Tomcat实例在用户看来像是一个单一的服务器,从而实现资源的高效利用。 Apache HTTP Server通过mod_jk模块与Tomcat进行通信,mod_jk负责将HTTP请求转发到适当的Tomcat实例。以下是详细的配置...
本文档详细介绍了使用mod_proxy模块与Apache和Tomcat结合来实现负载均衡与集群配置的过程。配置前需要准备相应的环境,包括安装JDK、Apache HTTP Server和Tomcat服务器。本文档使用了Tomcat 7.0.2作为应用服务器,并...
Apache通常通过其模块mod_proxy来实现负载均衡,它可以与Tomcat或者其他应用服务器进行集成。 在Apache中配置负载均衡,首先需要安装mod_proxy和mod_proxy_balancer模块。这些模块允许Apache作为反向代理服务器,...
**1.1 配置 Apache 实现负载均衡** Apache 的负载均衡可以通过 mod_proxy 和 mod_jk 模块来实现。其中 mod_jk 是一个专门为 Apache 和 Tomcat 设计的模块,用于处理负载均衡任务。以下是一些关键配置示例: - **...
标题中的“在32位操作系统上配置apache+tomcat集群/负载均衡/session复制”涉及到的是在32位系统环境下,如何构建一个使用Apache HTTP Server作为前端负载均衡器,与多个Tomcat应用服务器协同工作的集群环境,并实现...
当我们谈论"Apache,tomcat负载均衡和session复制"时,这意味着我们要探讨如何在多台服务器之间分配负载,并确保用户会话的无缝迁移和一致性。 **负载均衡**是解决高并发、高可用性问题的重要策略。它通过将来自...
通过以上步骤,可以在 Linux 环境下成功搭建 Apache+Tomcat 集群,并实现负载均衡以及 session 复制。这种方式不仅提高了系统的可伸缩性和可靠性,还能够有效提升用户体验。在实际操作过程中,还需要根据具体情况...
在Linux环境中,使用Apache、Tomcat和JK模块实现负载均衡和群集是一项常见的高可用性架构设计,它能够有效地分发网络流量,提高系统的可扩展性和稳定性。Apache作为前端Web服务器,负责接收用户请求并根据配置策略将...
本篇文章将详细探讨如何使用NGINX作为负载均衡器,结合TOMCAT 6应用服务器和REDIS作为session会话存储来实现负载均衡下的session会话同步。 首先,我们需要理解负载均衡的基本概念。负载均衡是指在多台服务器之间...