`

基于Redis实现Apache和Tomcat集群的Session共享配置

阅读更多

之前博主文章有介绍过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-redis-session-manager

四、配置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保持不变。

20160815120638 20160815120659

redis中可以看到保存的session 。

20160815120902

参考连接:http://www.cnblogs.com/lengfo/p/4260363.html

分享到:
评论

相关推荐

    tomcat集群session共享

    tomcat集群session共享

    tomcat集群基于redis共享session使用到的jar包

    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....

    tomcat8用redis实现session共享.rar

    3、将redisson-all-3.11.2.jar和redisson-tomcat-8-3.11.2.jar 拷贝到${catalina.base}\lib下 4、在原有tomcat\context.xml下 添加 以下代码(参考 &lt;Manager className="org.redisson.tomcat....

    tomcat-redis-session共享集群jar

    apache-tomcat-7基于redis进行session共享集群部署所需JAR包 commons-pool-1.6.jar commons-pool2-2.3.jar jedis-2.8.0.jar tomcat-juli.jar tomcat-juli-adapters.jar tomcat-redis-session-manager1.2.jar

    tomcat-cluster-redis-session-manager:Tomcat集群Redis会话管理器Java客户端

    在这里,会话被实现为非粘性的(意味着,每个请求都可以转到集群中的任何服务器,这与Apache提供的Tomcat集群设置不同。) 请求会话将立即存储到Redis中(会话属性必须是可序列化的),以供其他服务器使用。 当...

    tomcat-redis-session-manager tomcat+nginx+redis集群所需jar

    apache-tomcat-7.0.67+nginx-1.14.0+Redis-x64-3.2.6379集群部署所需JAR包

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    redis:Nosql数据库,搭配shiro的会话管理功能将session存入redis中,实现tomcat多服务器集群的session共享 nginx:反向代理服务器,用来调度多台tomcat h2:内存数据库,用于测试 开发环境 ==== jdk...

    tomcat-redis集群环境所有包

    包含: 1、apache-tomcat-7.0.41-windows-x64免安装 2、Redis-x64-3.2.100.msi ...3、tomcat-cluster-redis-session-manager tomcat session所需的jar包 4、getsession.jsp 和setsession.jsp 测试session设置和获取

    tomcat session

    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.jar tomcat-juli.jar tomcat-juli-adapters.jar commons-pool-1.5.4.jar commons...

    tomcat-redis-session-manager jedis

    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.jar tomcat-juli.jar tomcat-juli-adapters.jar commons-pool-1.5.4.jar commons...

    tomcat-redis-session-manager-1.2-tomcat-7:tomcat-redis-session-manager-1.2-tomcat-7

    会话被实现为非粘性的——也就是说,每个请求都能够到达集群中的任何服务器(与 Apache 提供的 Tomcat 集群设置不同。) 会话在创建后立即存储到 Redis 中以供其他服务器使用。 会话直接从 Redis 请求加载(但在...

    TomcatRedisClusterEnabledSessionManager:启用了Tomcat Redis群集的会话管理器

    它基于redis.properties配置支持单个Redis主服务器和Redis集群。 展望未来,我们无需在负载均衡器中启用粘性会话(JSESSIONID)。 支持: Apache Tomcat 7 资料下载: 启用了Tomcat Redis群集的会话管理器可用 ...

    java开源包3

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包4

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包1

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包11

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包2

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包6

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

    java开源包5

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

Global site tag (gtag.js) - Google Analytics