由于tomcat使用的为集群, 通过nginx访问时轮询不同的tomcat, 使得session无法统一, 所以将session单独抽取出来做共享session.

此tomcat版本为 7.0.61.tar.gz  刚开始用7.0.75对他来说版本太高了, 一直包异常!!!!!!

首先打开两台tomcat, 使用nginx进行反向代理, 修改 CATALINA_HOME/conf/server.xml

#tocmat01中配置
<Engine name="Ca.." def.. jvmRoute="tomcat1">
#tomcat02中配置
<Engine name="Ca.." def.. jvmRoute="tomcat2">
#tomcat03中配置
<Engine name="Ca.." def.. jvmRoute="tomcat3">

此时通过页面取值

<html lang="en">
<h1>tomcat_01</h1>
sessionId: <%=session.getId()%>
sessionIP: <%=request.getServerName()%>
</html>

可在浏览器中看到sessionId的变化

关于session共享有四种方案

1), tomcat广播, 对系统资源占用较大, 占用io流, 不推荐使用

2), 使用memcache

3), 使用redis, 安装第三方库,

4), 使用tengine的cookie一致性解决

本文只讲后面三种方式

2, 使用memcached作为session管理

2.1) 安装memcached

yum -y install memcached

2.2) 测试memcached是否安装成功, 使用telnet, 没有的话yum安装

telnet localhost 

会显示:

然后:

set abc

出现STORED表示memcached安装成功

2.3) tomcat下安装jar, 拷贝到 CATALINA_HOME/lib 目录下,

  

2.4) 更改tomcat配置

vim ./conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.208.102:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
sequestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

之后启动tomcat, 既可以看到sessionID已经不变了

3, 使用redis解决session一致性问题

配置和memcached基本类似

3.1) 安装redis

yum install redis

启动

service redis start

3.2) 修改reids.conf 中的 bind, 否则只能使用localhost访问

vim /etc/redis.conf

bind 192.168.208.102

3.3), 在 CATALINA_HOME/conf/context.xml 中添加配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.208.102"
port=""
database=""
maxInactiveInterval="" />

3.4) 将redis和tomcat的session-manager jar包导入

此时启动tomcat, 就可以完成session一致性问题了

4, 使用tengine的会话保持功能实现

tengine提供了cookie保持功能, 即客户端访问一台服务器后, 始终指向该台服务器, 相当于粘滞功能

fallback: 服务挂了是否访问其他机器

domain: 访问域名, 默认不配置

path; cookie路径, 默认不配置

此种情况, 分配的那台tomcat挂了以后, 就不能狗保持回话一致了, 因此并不为一种可靠的解决方案.

需要浏览器开启cookie, 才可以使用

此外, 使用memcached或redis时, 如果不想安装插件, 可在代码中直接操作缓存来存储和取出数据, 相当于session, 为一种比较可靠的一致性解决方案

系列来自尚学堂极限班

6-nginx-会话一致性解决(sesion一致)的更多相关文章

  1. 【转】ora-00031:session marked for kill(标记要终止的会话)解决方法

    今天碰到一个问题,有一张表不能操作,很可能是被锁了,首先想到的是kill session,于是执行了下列的脚本找到是哪个session有问题: select object_name, machine, ...

  2. [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题

    使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...

  3. nginx反向代理-解决前端跨域问题

    1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...

  4. Nginx会话保持之nginx-sticky-module模块

    Nginx会话保持之nginx-sticky-module模块 - 天行健,君子以自强不息:地势坤,君子以厚德载物. - CSDN博客https://blog.csdn.net/huangjinjin ...

  5. [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题

    转:http://blog.csdn.net/zhengwish/article/details/51602059 通过设置nginx的client_max_body_size解决nginx+php上 ...

  6. 返回xml过长时被nginx截断的解决办法

    返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

  7. nginx会话保持之sticky模块

    nginx会话保持之nginx-sticky-module模块 在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:1.ip hash,根据客户端的IP,将请求分配到不同的服务器上:2.cooki ...

  8. 项目部署问题:xftp无法连接服务器、Nginx403 Forbidden解决、nginx反向代理解决前端跨域问题

    一.xftp无法连接服务器 在xftp中配置正确的ip,用户名和密码后,居然无法连接 解决方案:将协议里面的FTP换成SFTP,注意换成SFTP后端口就默认换成22,要还是原来的21就还是连不上的哈 ...

  9. 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题

    通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题:用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_si ...

随机推荐

  1. PAT甲 1011. World Cup Betting (20) 2016-09-09 23:06 18人阅读 评论(0) 收藏

    1011. World Cup Betting (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Wit ...

  2. Scala中()与{}

    Scala中()与{}的关系 在Scala中有些时候()和{}是可以相互替换的,但是如果不弄清楚到底什么时候该用(),什么时候该用{},什么时候二者可以相互替换,那么在写代码的时候难免为出错,并且自己 ...

  3. Spark-1.2.2部署

    1.安装Scala 1.1解压和安装 在Scala官网http://www.scala-lang.org/download/下载Scala安装包,然后解压.(注:JDK的版本最好是1.7及以上,否则S ...

  4. hdu 4996 1~n排列LIS值为k个数

    http://acm.hdu.edu.cn/showproblem.php?pid=4996 直接贴bc题解 按数字1-N的顺序依次枚举添加的数字,用2N的状态保存在那个min数组中的数字,每次新添加 ...

  5. flume 整合kafka

    背景:系统的数据量越来越大,日志不能再简单的文件的保存,如此日志将会越来越大,也不方便查找与分析,综合考虑下使用了flume来收集日志,收集日志后向kafka传递消息,下面给出具体的配置 # The ...

  6. dorado-TabControl

    1.TabControl控件有点类似于.net中TableControl控件 2.常用属性 2.1 currentTab页面加载时,默认打开第几个tab,从0开始 2.2 shouMenuButton ...

  7. NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json

    一.简介 1.读取配置文件是开发过程中使用非常频繁的操作.属称”不能写死“ 二.NetCore读取配置文件 1.新建一个静态公共变量,属称单例. 2.在程序Startup启动时,将系统变量传递给单例. ...

  8. MongoDB的下载、安装与部署方法

    1.什么是MongoDB? 它是介于关系型数据库和非关系型数据库之间的一种NoSQL数据库,用C++编写,是一款集敏捷性.可伸缩性.扩展性于一身的高性能的面向文档的通用数据库. 2.为什么要用Mong ...

  9. C# 使用log4net写日记

    一 导入LOG4NET 打开VS2012 工具>>库程序包管理器>>管理解决方案的NuGet程序包,搜索LOG4NET,如下图 二 添加配置文件log4net.config 在 ...

  10. 3D Spherical Geometry Kernel( Geometry Kernels) CGAL 4.13 -User Manual

    Introduction The goal of the 3D spherical kernel is to offer to the user a large set of functionalit ...