`
ywskin
  • 浏览: 2476 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

web集群配置1——apache+tomcat+session复制

阅读更多

将QQ空间的帖子移到这里,原文地址  http://user.qzone.qq.com/396768440/blog/1364571672

 

apache是使用非常广泛的web服务器,tomcat也是使用广泛的JSP服务器,可以使用apache和tomcat来搭建集群。
apache2.2的代理支持负载均衡,可以添加多个web服务(IP+端口),当然也能跳转到tomcat上。老版的apache可以下载mod_jk来配置tomcat。
多个tomcat间采用session复制的方式,这种方式tomcat个数不宜太多,通常在4个以下。

1、apache的配置文件conf/httpd.conf,添加以下内容。这些内容在文件中已有,只是被注释了。
Include conf/extra/httpd-vhosts.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

2、apache的配置文件conf/extra/httpd-vhosts.conf,删除原来的VirtualHost节点,添加以下内容。其中8080、8081是tomcat的访问端口,loadfactor为负载因子。images目录的路径不转向tomcat,其它路径都转向tomcat。
<VirtualHost *:80>
ErrorLog "logs/error.log"
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
CustomLog logs/access.log vcommon
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /images/ !
ProxyPass / balancer://tomcat/
ProxyPassReverse / balancer://tomcat/
<Proxy balancer://tomcat/>
BalancerMember http://127.0.0.1:8080 loadfactor=1
BalancerMember http://127.0.0.1:8081 loadfactor=1
#BalancerMember ajp://localhost:8009 loadfactor=1
#BalancerMember ajp://localhost:8010 loadfactor=1
ProxySet lbmethod=bybusyness
</Proxy>
</VirtualHost>

3、多tomcat间session复制的配置,这种方式下的tomcat只好不要超过过4个,否则会因session在多个tomcat间复制而开销太大。如果多个tomcat在一台机器上,需要修改server.xml中的端口(8005、8006、8080),防止端口冲突。
tomcat目录/conf/server.xml文件中,Engine节点添加jvmRoute属性,各个tomcat可配成不同值,用来标识每个tomcat。如s1表示第一个tomcat,s2表示第二个tomcat。<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">

Engine节点中添加以下内容。228.0.0.4是广播地址。
<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>
<Value className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Value 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"/>

4、在每个tomcat的web工程(这里用testtomcat为工程名)的目录下,WEB-INF/web.xml的web-app节点,添加以下内容。用来支持session复制。
<distributable/>

5、在每个tomcat的web工程的目录下,添加index.jsp文件,用来测试,内容如下。
<%java.util.Enumeration enums = request.getParameterNames();
String action = request.getParameter("action");
while(enums.hasMoreElements()){
String name = (String)enums.nextElement();
if(action != null && action.equals("add") && name.equals("action")==false){
session.setAttribute(name, request.getParameter(name));
}
if(action != null && action.equals("delete") && name.equals("action")==false){
session.removeAttribute(name);
}
}
String[] s = session.getValueNames();
out.println("session id:"+session.getId()+"<br/>");
if(s == null){
out.println("session is null <br/>");
}
else{
out.println("session is<br/>");
for(String sname:s){
out.print(sname+":"+session.getAttribute(sname)+"<br/>");
}
}
%>

完成以上以上5步,然后启动apache和2个tomcat。
本地浏览器中,访问不同的tomcat下相同的web工程,生成的sessionId一样,并且能共享session。
1)访问以下URL,设置session值。页面显示session id中后.s2,表示此次访问定位到tomcat2。如果tomcat中不配置jvmRoute属性,则不会有.s2。
http://127.0.0.1/testtomcat/index.jsp?action=add&name=jim&sex=man
页面内容:
session id:F7AFF0B6D28051B9473313BA291FD484.s2
session is
name:jim
sex:man

2)打开URL。如果快速刷新,会看到s1、s2交替变化。
http://127.0.0.1/testtomcat/index.jsp
页面内容
session id:F7AFF0B6D28051B9473313BA291FD484.s2
session is
name:jim
sex:man

3)停掉tomcat2,再打开,则会访问到s1节点。
http://127.0.0.1/testtomcat/index.jsp
页面内容
session id:F7AFF0B6D28051B9473313BA291FD484.s1
session is
name:jim
sex:man

0
1
分享到:
评论

相关推荐

    Tomcat集群——使用MSM管理集群Session

    - 首先,需要在所有Tomcat服务器的`server.xml`配置文件中启用集群配置,定义`Cluster`元素。 - 接着,配置`BackupManager`或`DeltaManager`作为Session复制策略,这里我们选择MSM,即`DeltaManager`。 - 然后,...

    apache-tomcat-8.0.zip

    - 通过`cluster`元素配置,可以在多台Tomcat之间实现session复制和故障转移。 - 可以结合外部负载均衡器如Nginx或Apache HTTPD进行更高级的负载分发。 11. **国际化和本地化**: - 使用`ResourceBundle`实现应用...

    session共享方案(tomcat8+redis共享session)

    2. **配置Tomcat的Session Manager**:在Tomcat的`conf/context.xml`或应用的`WEB-INF/web.xml`中,配置`Manager`元素来使用`org.apache.catalina.session.PersistentManager`。添加以下属性: ```xml ...

    tomcat8-session-jars.zip

    总结一下,这个压缩包提供的jar文件是解决Tomcat8集群环境下的session共享问题的关键,它支持两种流行的分布式缓存解决方案——Memcache和Redis。开发者可以根据实际需求和环境,选择合适的方式实现session的高效、...

    配置tomcat集群

    "Tomcat 5集群中的SESSION复制"是集群配置的重要部分。在Tomcat中,SESSION复制是指当一个用户在集群中的某个节点创建了SESSION后,这个SESSION需要被复制到其他节点,以保证即使原始节点出现故障,用户在其他节点上...

    Tomat+redis+nginx集群工具

    在我们的集群配置中,Nginx可以作为前端,接收用户的请求,然后根据预设的策略(如轮询、最少连接数等)将请求分发到后端的Tomcat实例上,实现负载均衡。 现在,我们来看一下提供的压缩包文件: 1. `apache-tomcat...

    WEB服务器工作机制由浅至深(6):【How Tomcat Works】第12章StandardContext翻译分析

    它管理session的超时设置,以及在集群环境中session的复制和分布。 6. **过滤器和监听器** 在StandardContext中,可以配置过滤器和监听器来增强Web应用的功能。过滤器在请求处理前和后执行,可以进行数据转换、...

    深入剖析tomcat (完整目录)

    - 学习如何配置Tomcat集群,实现session复制和负载均衡,提高系统可用性和扩展性。 7. 日志与监控 - 日志系统的配置,包括使用Commons Logging、Java Util Logging或Log4j,并理解日志级别和日志切分。 - 使用...

    Window+Nginx.doc

    2. **Web容器本身的Session共享策略** —— 对于Tomcat,使用广播方式复制Session,可能导致带宽浪费和网络延迟,官方推荐不超过4台Tomcat。 3. **Tomcat集群+Redis的Session共享** —— 更稳定高效,推荐使用。 ...

    TomcatServer.rar

    6. **集群和负载均衡**:Tomcat支持集群配置,通过复制session和负载均衡策略,可以实现高可用性和故障切换。 7. **与Spring Boot集成**:现代开发中,Tomcat常作为Spring Boot的内置服务器,简化了部署过程,同时...

    tomcat工作原理-组件

    Tomcat支持集群配置,通过复制Session和负载均衡来提高可用性和性能。这使得在多台服务器之间分布请求成为可能,提高了系统的健壮性。 10. **安全管理** Tomcat提供了多种安全机制,如SSL/TLS加密、用户认证和...

    tomcat6(包括32位,64位)

    - 使用Session复制或粘滞会话实现集群中的会话保持。 9. 更新与升级: - 为了安全性和性能提升,应及时关注官方发布的更新和补丁。 - 升级到更高版本如Tomcat7或Tomcat8时,需要注意API和配置的差异,以及可能的...

    Linux下Nginx搭建

    每个Tomcat实例都可以访问共享的Session存储——Memcached,从而保证了用户Session在不同Tomcat实例间的同步。 总的来说,这个过程涵盖了Linux上Nginx的安装、配置,以及与Tomcat和Memcached的集成,实现了一个高效...

    JAVA上百实例源码以及开源项目源代码

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

Global site tag (gtag.js) - Google Analytics