文档章节

基于nginx+tomcat+redis 分布式web应用的session共享 的配置过程

undefine
 undefine
发布于 2016/01/21 12:21
字数 641
阅读 272
收藏 33

一:结构图

二:环境

测试环境基于 Linux CentOS 7.X,请先安装 tomcat、redis、nginx 相关环境,不作详细描述,本文测试配置如下:

   Version  IP_Port
 nginx  1.8.0  192.168.1.200:80
 tomcat_1  7.0.67  192.168.1.200:8080
 tomcat_2  7.0.67  192.168.1.200:9090
 redis  3.0.6  192.168.1.200:6379



三:依赖环境

Jdk:最好7以上;

gradle:简介与说明

git:简介与说明

redis:安装与说明

Nginx:参考安装地址(yum安装)

四:构建 tomcat-redis-session-manager-master

首先从git上clone下来到本地

git clone git@github.com:jcoleman/tomcat-redis-session-manager.git
cd tomcat-redis-session-manager.git

先不执行build,先修改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.67'
  compile group: 'redis.clients', name: 'jedis', version: '2.8.0'
  compile group: 'org.apache.commons', name: 'commons-pool2', version: '2.4.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.67'
}

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
}
task copyJars(type: Copy) {
  from configurations.runtime
  into 'dist'  
}

//signing {
//  sign configurations.archives
//}

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'
          }
        }
      }
    }
  }
}

PS:注意上面打注释和task copyJars 的地方  去除第三方仓库(sonatype),用了中央仓库,然后后面的copyJars是拷贝jar包到dist目录中

然后(window下cmd进入clone的目录下)进行编译 


gradle build -x test  copyJars



然后生成的jar如下(session-manager的那个在build\libs下)


五:两台tomcat 调整

1.上述jar包如果tomcat\lib下没有,则放入lib下

2.修改tomcat conf下的context.xml,在Context间加入

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
           host="127.0.0.1"
           port="6379"
           database="0"
           maxInactiveInterval="60" />



3.修改server.xml中的相关端口,调整http端口分别为8080与9090

4.放如sessionId JSP测试页面,输出SESSIONID

5.启动tomcat

六:Nginx 配置

修改默认的default.conf-->

upstream site {  
    server localhost:8080; 
    server localhost:9090; 
}  

server {
    listen       80;
    server_name  localhost;
    location / {
        index  index_tel.jsp index.jsp index.html index.htm ;  
        proxy_redirect          off;    
        proxy_set_header        Host            $host;    
        proxy_set_header        X-Real-IP       $remote_addr;    
        proxy_set_header        X-Forwarded-For    $proxy_add_x_forwarded_for;
        client_max_body_size    10m;    
        client_body_buffer_size 128k;    
        proxy_buffers           32 4k;  
        proxy_connect_timeout   3;    
        proxy_send_timeout      30;    
        proxy_read_timeout      30;   
        proxy_pass http://site; 
         
    }
}



重启Nginx服务

七:测试效果



八:大功告成(强行8)



© 著作权归作者所有

undefine

undefine

粉丝 19
博文 51
码字总数 28605
作品 0
深圳
程序员
私信 提问
多台tomcat服务的session共享 memcached与redis

由于tomcat的并发数瓶颈问题,可以说使用tomcat的web应用,几乎都存在session不同步问题。 借鉴网上的资料,我也找时间实验一把。 文中涉及的软件下载和安装,一一略过,想必大家也没必要看。...

凯文加内特
2015/03/19
0
0
nginx+tomcat+redis负载均衡,实现session共享

实验环境: 基础理论 session 统一方案: 1、单机的session会话保持机制如nginx的ip-hash,如果单个机器下线,那么session将会全部丢失 2、session共享,如tomcat集群,多个应用服务器共享同...

812374156
2018/04/23
0
0
Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享 CentOS安装Nginx http://centoscn.com/CentosServer/www/2013/0910/1593.html CentOS安装Tomcat http://blog.csdn.net/zhuyinglinu......

Q317075064
2016/09/29
104
0
nginx+tomcat+redis

项目用 nginx+tomcat+redis 去做session共享 奇怪的是redis保存tomcat传过来session ,默认60秒就过期了 之后会存储新的session值 大家有遇到这种情况吗 用的 tomcat7 centos6.5 redis2.8.1...

一个人眺望碧海和蓝天
2016/03/19
405
2
分布式学习(4) ---- Spring Session + Redis实现分布式Session共享

单个服务器的应用,Tomcat会将Session保存在本机内存中,但一旦涉及到分布式应用,如何实现不同服务器间的Session共享问题呢? 目前比较主流的方式还是基于分布式缓存Memcached、redis实现,...

KKys
2017/02/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

硬件配置

https://akkadia.org/drepper/futex.pdf sudo lshw -businfo[sudo] lambda 的密码: Bus info Device Class Description======================================......

MtrS
今天
3
0
springmvc的return “success”源码解读

qqqq

architect刘源源
今天
6
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
4
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部