1:Session共享

  为什么要实现共享,如果你的网站是存放在一个机器上,那么会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话

id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情

况,于是session的共享就成了一个问题。

2:Session一致性(共享)解决方案

  1、session复制:tomcat 本身带有复制session的功能
  2、共享session
    – 需要专门管理session的软件memcached
    – memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session

2.1:Linux安装memcached

  1.Linux系统安装memcached,首先要先安装libevent库:yum install libevent libevent-deve

  2.安装 Memcached:.yum -y install memcached

  3.Memcached 启动运行:service memcached start

  4.Memcached 测试连接:使用telnet 命令并指定主机ip和端口来连接 Memcached 服务。语法:telnet HOST PORT,HOSTPORT 为运行

Memcached 服务的 IP 和 端口

  实例:演示如何连接到 Memcached 服务并执行简单的 set 和 get 命令

         本实例的 Memcached 服务运行的主机为 127.0.0.1(本机) 、端口为 11211

telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set foo 0 0 3 保存命令 3为长度 0为存活时间
bar 数据
STORED 结果
get foo 取得命令
VALUE foo 0 3 数据
bar 数据
END 结束行
quit 退出

   

2.2:Tomcat配置名称和session一致性配置(tomcat整合,让Tomcat从该缓从数据库中取session)

  5.拷贝https://pan.baidu.com/s/1j8A5QbqZM7uZoCR0IHLRBQ中lib下的jar包到tomcat的lib下(分别是200和201web服务器连接Memcached的jar包)

  6.修改Engine标签:tomcat的server.xml中配置jvmRoute属性(分别是200和201服务器)方便查看sessionid里面带有的Tomcat名字

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat200">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat201">

  7.Tomcat首页面index.jsp配置:(分别是200和201服务器)

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>     -----根据情况加,我加了报错了,去掉就好了
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcatxxx page</h1>

  进行访问:http://192.168.232.201:8080/

  

  进行访问:http://192.168.232.200:8080/

  

  进行访问:http://shizhan2:8888/,通过域名访问192.168.232.201,使用反向代理继而访问201和200的Tomcat服务器,不断刷新页面,发现

sessionid是不断变化的,所以下面配置Memchched缓存数据库(启动Memchched服务)

  8.修改Tomcat的context.xml文件,配置Manager

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
   #配置memcachedNodes属性:配置memcached数据库的IP和端口,默认11211,多个用空格隔开,目的让Tomcat从memcached缓从里面取放session
memcachedNodes="n1:192.168.232.201:11211" #我们的memcached安装在192.168.232.201服务器上
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

  配置好后使用域名进行访问:http://shizhan2:8888/

  

5.利用redis实现session共享

  安装redis缓存数据库:yum -y install redis

  修改配置文件vi /etc/redis.conf,将bind的127.0.0.1修改为本机地址(192.168.232.201:安装了redis),否则只能通过localhost访问了

  导入redislib中三个jar包到tomcat中(201和200),包连接:https://pan.baidu.com/s/1L1ytXRW4ig4YCukg3j-oZQ

  

  在tomcat/conf下的context.xml中添加配置(201和200):

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

  

  

  

  

  

  

  

  

  

5.Nginx的session一致性(共享)问题配置方案1的更多相关文章

  1. 6.Nginx的session一致性(共享)问题配置方案2

    1.利用memcached配置session一致性的另外一种方案tengine的会话保持功能 1.1:Tengine会话保持:通过cookie来实现的 该模块是一个负载均衡模块,通过cookie实现客 ...

  2. Nginx的session一致性问题

    session一致性memcached缓存数据库解决方案 1.安装memcached内存数据库 yum –y install memcached 可以用telnet localhost 11211 S ...

  3. nginx 解决session一致性

    session 粘滞性每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题. upstream backserver {ip_hash;server ...

  4. 详解Session分布式共享(.NET CORE版)

    一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...

  5. Nginx+tomcat集群中,session的共享

    nginx,tomcat集群后多个session分配到同一个应用 单节点低负荷的情况下,我们通常把一个WEB应用打成WAR包放WEB应用服务器,如TOMCAT下运行就行了(如图1).但随着用户量的增加 ...

  6. nginx负载均衡中利用redis解决session一致性问题

    关于session一致性的现象及原因不是本小作文的重点,可以另行找杜丽娘O(∩_∩)O哈哈~重点是利用redis集中存储共享session的实际操作. 一.业务场景:nginx/tomcat/redi ...

  7. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  8. Session分布式共享 = Session + Redis + Nginx

    一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下. Session:在计算机中,尤其是在网络应用中,称为"会话控制 ...

  9. nginx之 nginx + tomcat + redis 负载均衡且session一致性

    说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...

随机推荐

  1. React Native的生命周期

    就像 iOS开发中 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键.RN ...

  2. Daily in Ipin

    Friday, October 23 1. [道高一尺,墙高一丈:互联网封锁是如何升级的] Monday, October 12 1. 晕死,忘了ubuntu的登录密码,鼓捣了半个小时,终于成功进入系 ...

  3. JavaScript基本入门02

    目录 JavaScript基础入门 02 条件语句 if 语句 if .. else 语句 switch 结构 循环语句 while 循环 continue 关键字 do...while语句 for ...

  4. Docker监控容器资源的占用情况

    启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [root@localhost ~]# docker run --name os1 -it -m 1g --cp ...

  5. JS&和&&-T

    &&逻辑与 &按位与(转换为二进制运算) console.log(1&2); console.log(1&&2); 上面打印的结果是什么呢? 先复习一下 ...

  6. 使用sequelize-auto生成sequelize的Models

    一.全局安装sequelize-auto npm install -g sequelize-auto 二.全局安装对应数据库的驱动,此处使用的是mysql npm install -g mysql 三 ...

  7. 记录解决一个项目中遇到的maven打包问题

    拿到同时给的代码,进行打jar包,这个jar包依赖一个第三方的jar包,一开始用IDEA打出来的包,没有把依赖的包打进去,后来查了相关的资料, 发现需要在maven的pom中添加相关的maven插件, ...

  8. 菜鸟系列docker——搭建私有仓库harbor(6)

    docker 搭建私有仓库harbor 1. 准备条件 安装docker sudo yum update sudo yum install -y yum-utils device-mapper-per ...

  9. [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增

    [HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题. 讲课的时候都在想怎么后 ...

  10. vi去掉^M

    Windows下编辑的文本文件or程序文件,拷贝到linux下,用vi打开时,有时候会看到每行末尾有个 ^M 的符号. 这里介绍一个可以快速去除^M符号的方法: 用vi编辑器打开该文件,然后输入: : ...