Memcached + MSM 实现Tomcat Session保持

Memcached + MSM 实现Tomcat Session保持



tomcat memcached

大纲

  • 前言
  • Memcached介绍
  • MSM介绍
  • 实验拓扑
  • 实验环境
  • 实验步骤
    • 安装配置Tomcat
    • 安装配置Nginx负载均衡
    • 安装配置Memcached + MSM
  • 总结

前言

上篇文章我们实现了session stickysession cluster实现用户session的保持, 这篇文章主要介绍使用Memcached + MSM来实现用户session的保持

Memcached介绍

Memcached是一款免费、开源、分布式的内存对象缓存系统, 用于减少数据库的负载, 加快web应用程序的访问. Memcached简单并且强大, 其简单的设计加快了部署, 易于开发, 缓存解决了面临的大量数据时很多的问题

官方站点: http://memcached.org/

MSM介绍

MSM(memcached session manager), MSM是一款实现Tomcat会话保持的管理组件, 支持粘性和无粘性的配置, 目前可以在Tomcat6,7,8中使用, 并且支持Memcached会话故障转移

GitHub https://github.com/magro/memcached-session-manager

实验拓扑

实验环境

由于我们虚拟机数量不够, 所以MemcachedTomcat运行在同一节点

主机 IP 功用
node1.anyisalin.com 172.16.1.2 Nginx
node2.anyisalin.com 172.16.1.3 TomcatA,Memcached Node
node3.anyisalin.com 172.16.1.4 TomcatB,Memcached Node

实验步骤

安装配置Tomcat

我们首先配置Tomcat, 安装过程这里不做叙述, 不明白的可以看我上篇博客: tomcat基础进阶

安装Tomcatnode2,3都要操作

[[email protected] ~]# [[email protected] ~]# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz
[[email protected] ~]# tar xf apache-tomcat-8.0.33.tar.gz  -C /usr/local/
[[email protected] ~]# cd /usr/local ; ln -sv apache-tomcat-8.0.33 tomcat ; cd ~
[[email protected] ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm #如果下载出错, 使用浏览器下载
[[email protected] ~]# rpm -ivh jdk-8u77-linux-x64.rpm   #安装JDK

[[email protected] ~]# vim /etc/profile.d/java.sh     #定义JAVA_HOME
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH

[[email protected] ~]# vim /etc/profile.d/tomcat.sh    #配置tomcat的环境变量
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH

[[email protected] ~]# source /etc/profile.d/tomcat.sh
[[email protected] ~]# source /etc/profile.d/java.sh

配置虚拟主机

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml   

#设置默认虚拟主机为web1.anyisalin.com #node3的jvmRoute设置为TomcatB
<Engine name="Catalina" defaultHost="web1.anyisalin.com" jvmRoute="TomcatA">  

#添加虚拟主机
<Host name="web1.anyisalin.com" appBase="/data/webapps/" unpackWARS="true" autoDeploy="true">
   <Context path="" docBase="/data/webapps" reloadable="true" />
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
        prefix="web1_access_log." suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

[[email protected] ~]# mkdir -PV /data/webapps/{WEB-INF,META-INF,classes,lib}  #创建目录

node2创建网页文件

[[email protected] ~]# cd /data/webapps/

[[email protected] ~]# vim index.jsp  #创建网页文件
<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

[[email protected] webapps]# catalina.sh start #启动tomcat

node3创建网页文件

[[email protected] ~]# cd /data/webapps/

[[email protected] ~]# vim index.jsp  #创建网页文件
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB.magedu.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("magedu.com","magedu.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

[[email protected] webapps]# catalina.sh start #启动tomcat

访问测试

安装配置Nginx负载均衡

安装nginx

在node1上安装配置
[[email protected] ~]# yum install nginx -y  #确保有epel源

配置nginx

[[email protected] ~]# vim /etc/nginx/conf.d/default.conf  #修改以下字段
    upstream tmcat_server {
        server 172.16.1.3:8080;
        server 172.16.1.4:8080;
    }

    location / {
        proxy_pass http://tmcat_server;
    }

[[email protected] ~]# service nginx start  #启动nginx

测试负载均衡效果

安装配置Memcached + MSM

下面所有操作在node2,node3都需要执行

安装Memcached

[[email protected] ~]# yum install memcached -y     #在node2上安装memcached
[[email protected] ~]# yum install memcached -y     #在node3上安装memcached

下载MSM的类库文件到/usr/local/tomcat/lib 下载地址

[[email protected] ~]# cd /usr/local/tomcat/lib/        

##我这里本地已经有这些文件了
[[email protected] ~]# mv javolution-5.5.1.jar memcached-session-manager-tc7-1.8.2.jar memcached-session-manager-1.8.2.jar spymemcached-2.10.2.jar msm-javolution-serializer-1.8.2.jar /usr/local/tomcat/lib/

编辑tomcat配置文件

在<Host>下的<Context> 中添加下面这些字段
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="n1:172.16.1.3:11211,n2:172.16.2.4:11211"
      failoverNodes="n2"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
       transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
 />

启动Memcached重启Tomcat并验证

[[email protected] ~]# service memcached start
[[email protected] ]# catalina.sh stop
[[email protected] ]# catalina.sh start

[[email protected] ~]# service memcached start
[[email protected] ]# catalina.sh stop
[[email protected] ]# catalina.sh start

测试

看!我们通过MSM实现了session的绑定

总结

本文主要介绍了通过MSM实现session server从而使客户端能够保持session, 总的来说还是很简单的, 毕竟Memcached配置简单, 但是要理解其中的原理还需要下一番功夫.

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~ 
作者: AnyISaIln QQ: 1449472454 
感谢: MageEdu

时间: 2024-10-11 17:03:16

Memcached + MSM 实现Tomcat Session保持的相关文章

tomcat session会话保持实验-之Nginx+tomcat+memcached

tomcat session会话保持实验-之Nginx+tomcat+memcached 实验要求 1.nginx+tomcat 负载均衡 2.memcached 会话保持 实验拓扑   ip网络规划 Nginxnode2:172.16.76.20 tomcatAnode3:172.16.76.30  memcached tomcatBnode4:172.16.76.40  memcached 基础配置   node2 [[email protected]~]# yum install ngin

实战项目memcached+tomcat+session+nginx在工作中的应用和配置

环境介绍:公司根据实际需要搭建一个购物网站,当用户购物时可以 将不同商品,放到同一个购物车中进行同时付款. 环境的搭建: 外网用户  IP地址:1.1.1.1  主机名:fanxiaohui  用户访问网站http://www.taobao.com 使用nginx实现负载均衡,由于网页是用JAVA开发的所以选用tomcat搭建网站服务,由于用户在购物时http是一个无状态的协议,不同的商品都是一个新的连接,默认不会把几个商品放到同一个购物车中,无法进行统一结账,为了能使服务器能够认识是同一个客户

MSM实现tomcat集群中session共享的高可用

目录 1.测试环境概述 2.MSM简介 2.1.MSM的特性 2.2.MSM要解决的问题 2.3.MSM的工作原理 3.环境搭建 3.1.memcached安装 3.2.jkd与tomcat安装配置 3.3.MSM sticky session + kryo模式的配置 3.4.MSM no-sticky session + kryo模式的配置 4.思考与总结 1.测试环境概述 采用两台linux x64主机,主机上分别安装memcached与tomcat,memcached提供key/value

基于memcached-session-manager的tomcat session共享集群

MSM的特性: a.支持tomcat 6,tomcat 7,tomcat 8 b.支持sticky session或no-sticky session c.无单点故障 d.tomcat故障转移 e.memcached故障转移 f.附带串行化插件 g.支持异步session存储,拥有更快的性能 sticky sessions粘性会话: 安装了MSM的tomcat会优先使用本机内存保存session,当一个请求结束后,MSM会把session发送到memcached节点上存放以作备份,第二次请求时,

memcached-session-manager 实现 tomcat session共享

原理 MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪.Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky  和 non-sticky 模式. Sticky 模式:tomcat session 为 主session, memcached

tomcat session server实现会话绑定

tomcat session server 此前已经进行过Tomcat的其他配置信息,这里不再进行重复的描述,会把重要的地方写上,不会影响实验 要想能够实现追踪有状态的web apps,对应的状态信息,有三种方式 session stickysession replication clustersession server 这里实现session server的实现方式 memcached可以借助于第三方的项目所提供的功能,实现使用memcached保存用户的session信息,项目称为MSM,

用 memcached 实现 Tornado 的 session 支持(一)

tornado 里面没有 session?不,当然有~我知道 github 上肯定有人帮我写好了~ O(∩_∩)O~ 于是乎,找到下面这个项目,用 memcached 实现 tornado 的 session.光会用可不行啊,让我们看看是怎么写的~ 项目地址:tornado-memcached-sessions 让我们先从 demo 看起.... app.py 中: 首先可以注意到,这里定义了一个新的 Application 类,继承于 tornado.web.Application, 在该类的

Nginx+tomcat session cluster会话保持实验

Nginx+tomcat session cluster会话保持实验 实验要求: 1.nginx+tomcat 负载均衡 2.会话保持 实验拓扑 ip网络规划 Nginxnode2:172.16.76.20 tomcatAnode3:172.16.76.30 tomcatBnode4:172.16.76.40 基础配置 node2: [[email protected]~]# yum install nginx –y    node3:     [[email protected]~]# yum

第四十四课 tomcat负载均衡群集、tomcat session群集

tomcat负载均衡集群的实现 tomcat  session集群 tomcat session  server及jvm参数调整