之前博主文章有介绍过apache和tomcat主备的配置步骤,在那个架构中,为了解决负载均衡时的session问题,apache配置里强制把session sticky在某个tomcat,或者直接使用主备。这样虽然可以解决不同的需求,但是如果项目更新或者重启tomcat,session肯定丢失,而且也不能实现项目的平滑更新。所以为了让tomcat可以承受更多并发,或者让tomcat更加高可用,或者对用户更加友好,维持session的方式有同步和共享两种。博主这里介绍session共享的配置,搭建统一session服务器。
一、安装Redis
安装参考文章:http://paynexss.iteye.com/admin/blogs/2344807
二、安装apache,两台tomcat
参考文章:
http://paynexss.iteye.com/admin/blogs/2344076
http://paynexss.iteye.com/admin/blogs/2344075
三、获取tomcat redis session manager
从网上下载下来的还是觉得不怎么靠谱,所以决定自己从源码打包。
1、获取第三方插件源码
git clone https://github.com/jcoleman/tomcat-redis-session-manager.git
2、源码构建基于gradle,所以需要先配置gradle环境,不要使用ubuntu下的apt方式安装。
root@ubuntu:~/softbak/# wget https://services.gradle.org/distributions/gradle-2.14.1-all.zip root@ubuntu:~/softbak/# unzip gradle-2.14.1-all.zip root@ubuntu:~/softbak/# mv gradle-2.14.1 /usr/local/ root@ubuntu:~/softbak/# cd /usr/local/ root@ubuntu:/usr/local# ln -s gradle-2.14.1 gradle root@ubuntu:/usr/local# vi /etc/profile root@ubuntu:/usr/local# #添加gradle的环境变量 root@ubuntu:/usr/local# gradle -v------------------------------------------------------------Gradle2.14.1------------------------------------------------------------Build time:2016-07-1806:38:37 UTC Revision: d9e2113d9fb05a5caabba61798bdb8dfdca83719 Groovy:2.4.4Ant:ApacheAnt(TM) version 1.9.6 compiled on June292015 JVM:1.7.0_45(OracleCorporation24.45-b08) OS:Linux3.5.0-23-generic amd64
3、找到源码中的 build.gradle 文件,由于作者使用了第三方仓库(sonatype),需要注册帐号,太麻烦,注释后直接使用maven中央仓库,同时注释签名相关脚本并增加依赖包的输出脚本 copyJars(dist目录),修改后的 build.gradle 文件如下:
apply plugin:'java' apply plugin:'maven' apply plugin:'signing'group='com.orangefunction' version ='2.0.0' repositories { mavenCentral()} compileJava { sourceCompatibility =1.7 targetCompatibility =1.7} dependencies { compile group:'org.apache.tomcat', name:'tomcat-catalina', version:'7.0.52' compile group:'redis.clients', name:'jedis', version:'2.5.2' compile group:'org.apache.commons', name:'commons-pool2', version:'2.2'//compile group: 'commons-codec', name: 'commons-codec', version: '1.9' testCompile group:'junit', name:'junit', version:'4.+' testCompile 'org.hamcrest:hamcrest-core:1.3' testCompile 'org.hamcrest:hamcrest-library:1.3' testCompile 'org.mockito:mockito-all:1.9.5' testCompile group:'org.apache.tomcat', name:'tomcat-coyote', version:'7.0.52'} task javadocJar(type:Jar, dependsOn: javadoc){ classifier ='javadoc'from'build/docs/javadoc'} task sourcesJar(type:Jar){from sourceSets.main.allSource classifier ='sources'} artifacts { archives jar archives javadocJar archives sourcesJar }//signing {// sign configurations.archives//} task copyJars(type:Copy){from configurations.runtime into'dist'} uploadArchives { repositories { mavenDeployer { beforeDeployment {MavenDeployment deployment -> signing.signPom(deployment)}//repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {// authentication(userName: sonatypeUsername, password: sonatypePassword)//}//repository(url: "https://oss.sonatype.org/content/repositories/snapshots") {// authentication(userName: sonatypeUsername, password: sonatypePassword)//} pom.project { name 'tomcat-redis-session-manager' packaging 'jar' description 'Tomcat Redis Session Manager is a Tomcat extension to store sessions in Redis' url 'https://github.com/jcoleman/tomcat-redis-session-manager' issueManagement { url 'https://github.com:jcoleman/tomcat-redis-session-manager/issues' system 'GitHub Issues'} scm { url 'https://github.com:jcoleman/tomcat-redis-session-manager' connection 'scm:git:git://github.com/jcoleman/tomcat-redis-session-manager.git' developerConnection 'scm:git:git@github.com:jcoleman/tomcat-redis-session-manager.git'} licenses { license { name 'MIT' url 'http://opensource.org/licenses/MIT' distribution 'repo'}} developers { developer { id 'jcoleman' name 'James Coleman' email 'jtc331@gmail.com' url 'https://github.com/jcoleman'}}}}}}
4、执行gradle命令构建源码,编译输出tomcat-redis-session-manager-master 及依赖jar包。
gradle build -x test copyJars
四、配置tomcat
1、分别将第三步生成的 tomcat-redis-session-manager-master 及依赖jar包覆盖到 tomcat 安装目录的 lib 文件夹。
2、分别修改2台 tomcat 的 context.xml 文件,使 tomcat-redis-session-manager-master 作为session管理器,同时指定redis地址和端口。
context.xml 增加类似以下配置:
<!-- redis session manager --><ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/><ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager"host="192.168.188.203"port="6379"database="0"maxInactiveInterval="60"/>
有关配置的其他参数可以参考:https://github.com/izerui/tomcat-redis-session-manager
配置修改完成后分别重启tomcat 。
五、配置apache
apache的主要配置类似如下:
#tomcat主备、负载均衡配置例子 开始ProxyRequests off ProxyPreserveHostOn#Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED<Proxy balancer://www.sijitao.net>BalancerMember ajp://192.168.188.112:8009 route=node1 loadfactor=1BalancerMember ajp://192.168.188.112:9009 route=node2 loadfactor=1#ProxySet stickysession=JSESSIONID#ProxySet stickysession=ROUTEID#byrequests(default),bytraffic,bybusynessProxySet lbmethod=byrequests ProxySet nofailover=On</Proxy>#不代理balancer目录ProxyPass/balancer !ProxyPass/ balancer://www.sijitao.net/ProxyPassReverse/ balancer://www.sijitao.net/#balancer目录,查看节点状态<Location/balancer>SetHandler balancer-manager Proxypass!Order allow,deny Allowfrom all </Location><Proxy*>Order allow,deny Allowfrom all </Proxy>#tomcat主备、负载均衡配置例子 结束
重启apache服务。
六、添加测试页面
测试页面代码index.jsp:
<%@ page language="java" %> <html><head><title>Tomcat 1</title></head><body><h1><fontcolor="green">Tomcat 1</font></h1><tablealign="centre"border="1"><tr><td>Session ID</td><% session.setAttribute("www.sijitao.net","www.sijitao.net"); %> <td><%= session.getId() %></td></tr><tr><td>Created on</td><td><%= session.getCreationTime() %></td></tr></table></body></html>
七、测试
创建好后就可以通过浏览器打开,可以看到tomcat集群生效,而且session保持不变。
redis中可以看到保存的session 。
参考连接:http://www.cnblogs.com/lengfo/p/4260363.html
相关推荐
本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 首先,我们需要理解Session的概念。Session是服务器端用于存储用户状态的一种机制,通常在用户...
本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...
描述中提到的“tomcat无缝集成redis实现tomcat集群session管理”,进一步强调了该解决方案的简易性和效率。通过将Redis集成到Tomcat中,可以有效地管理session,避免了传统session复制可能导致的问题,如数据不一致...
综上所述,实现Tomcat集群session共享主要涉及Tomcat的session管理机制、Redis的集成以及相应的配置和优化。通过合理配置,可以确保在高并发环境下提供无缝的用户体验,同时提升系统的可扩展性和可靠性。
本篇文章将深入探讨在Tomcat 8中通过`集群redis`实现session共享的方法。 一、session共享的重要性 在Web应用中,session是服务器端用来存储用户状态的一种机制,比如用户的登录信息、购物车内容等。在单台服务器...
总的来说,“【全套】tomcat集群Session共享”这套资源包含了实现Tomcat集群Session共享所需的全部工具和说明文档,能够帮助开发者有效地解决多实例Tomcat下的Session一致性问题,提升系统的可扩展性和可用性。...
完成上述配置后,重启Tomcat和Nginx服务,你的系统就能实现基于Redis的session共享和负载均衡了。需要注意的是,这种配置方式可以有效防止session丢失和并发访问的问题,但也可能导致额外的网络开销。因此,在实际...
"适配与Tomcat7、8、9的redis session共享jar包"指的是一个专为Apache Tomcat服务器设计的解决方案,用于在多台Tomcat服务器之间共享用户会话数据。这个解决方案主要依赖于Redis,一个高性能的键值存储系统,来存储...
Tomcat8是一个流行的开源Java Servlet容器,而Redis是一个高效的数据存储和缓存系统,常用于实现会话共享。本压缩包提供了在Tomcat8集群中通过Redis实现会话共享所需的jar包,这些jar包已经预先编译好,可以直接使用...
【标题】:“Tomcat Redis Session”指的是在Tomcat集群环境中,通过Redis来实现Session的共享与同步,以解决集群中的Session一致性问题。 【描述】:“Tomcat集群Nginx使用Redis保证Session同步”这一场景中,通常...
"集群redis实现session共享jar包之tomcat7"这个主题涉及到的是如何在基于Tomcat 7的Web应用集群中,利用Redis作为中央存储来共享用户的Session数据。下面将详细解释这一技术的实现原理和步骤。 首先,理解Session...
tomcat集群基于redis共享session使用到的所有jar包,放到tomcat的lib下即可使用 apache-tomcat-7.0.56+nginx-1.8.0+redis-3.0.6集群部署所需JAR包,session共享 tomcat-redis-session-manager1.2.jar jedis-2.6.2....
这就是“Tomcat集群session共享”的核心需求。本篇将详细介绍如何在Tomcat7中实现基于Redis的Session共享,并涉及相关的jar包。 首先,让我们了解为何需要session共享。在单个Tomcat服务器中,Session信息存储在...
通过这种方式,"tomcat7+redis集群 session共享jar"可以帮助开发者解决在Tomcat7集群中Session共享的问题,提升系统的可扩展性和可用性。在大型网站和分布式应用中,这样的解决方案能够保证用户在不同服务器之间切换...
标题"tomcat8集群与redis实现session共享所需Jar包"指的是将Redis作为中央存储来保存Tomcat集群中的session数据。Redis因其高性能、轻量级以及丰富的数据结构支持,常被选作session共享的中间件。描述中的"本人已经...
"Tomcat8集群session共享(redis处理)"的主题正是针对这一问题,通过集成Redis作为分布式缓存来解决。下面我们将详细探讨这个过程。 首先,我们需要理解Session的概念。Session是在Web应用中用于跟踪用户状态的一...
首先,让我们来看看如何在Tomcat 8中实现基于Redis的Session共享。`context.xml`文件是Tomcat配置的一部分,它定义了每个Web应用的上下文环境。在这个场景下,我们需要在`context.xml`中配置一个名为`Manager`的元素...
本篇文章将详细探讨如何利用`Redis`来实现`Tomcat7`集群的Session共享,并介绍所需的依赖包。 首先,我们需要理解`Session`的概念。在Web应用中,`Session`是服务器用来跟踪用户状态的一种方式。当用户登录后,...
这里的主题是利用Redis作为中间缓存来实现Tomcat集群中的session共享,这可以确保用户在集群中的任意一台服务器上登录后,其session信息能够在其他服务器上同样可用,从而提高系统的可扩展性和可用性。 首先,我们...