tomcat session server基于memcached的实现

1 篇文章 0 订阅
1 篇文章 0 订阅

简介

我们每次登录淘宝,不管在任意一台主机或手机上登录,我们的购物车里面的东西都不会变化,这是怎么做到的呢?那就是通过保存在服务端的session了。而通常像淘宝这样的网站,访问量那么大,服务端是有多台主机的,那么每次登录的时候,我们都不一定使用同一台后端主机进行。那么我们保存在服务端的session怎么进行多台后端主机的共享呢?

实现思路

1、一种方法是将所有session给每一台后端主机分发一份
2、另一种方法是所有的session都保存到同一台服务器上,后端主机每次使用时候,都向session server获取session信息。

存放session的server有redis,和memcached。不同的是redis是永久保存的,而memcached是将session保存到内存中。我们这里先使用memcached实现吧。
因为memcached是放在内存中的,一旦主机断电或损坏,都将导致数据丢失,那就最低需要两台memcached服务器了。

实现环境

1、tomcat两个节点:172.16.252.162(tomcatA),172.16.253.44(tomcatB)
2、memcached两个节点:172.16.252.162(memcachedA),172.16.253.44(memcachedB)
3、一个负载均衡节点:172.16.250.200

因为电脑不能开启多台虚拟机,就将memcached和tomcat放在了同一台主机上了。

软件要求

memcached-session-manager项目地址,http://code.google.com/p/memcached-session-manager/, https://github.com/magro/memcached-session-manager

下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的 versiontc {6,7,8}要换成与tomcat版本相同的版本号。

    memcached-session-manager-${version}.jar
    memcached-session-manager-tc${6,7,8}-${version}.jar
    spymemcached-${version}.jar
    msm-javolution-serializer-${version}.jar
    javolution-${version}.jar

实验步骤

1、将上述5个软件放入到各tomcat节点的tomcat安装目录下的lib目录中
2、分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:172.16.252.162:11211,n2:172.16.253.44:11211"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
</Context>

n1和n2不是主机名,仅仅是一个标示而已

3、分别为两个context提供测试页面:

tomcatA:

# mkdir -pv /usr/share/tomcat/webapps/test/{WEB-INF,classes,lib}
# vim /usr/local/tomcat/webapps/test/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>

tomcatB

# mkdir -pv /usr/share/tomcat/webapps/test/{WEB-INF,classes,lib}
# vim /usr/local/tomcat/webapps/test/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>
4、配置反向代理
upstream appsrvs
{
        server 172.16.252.162:8080 

;
        server 172.16.253.44:8080 

;
        hash $cookie_name consistent;
}
server {
    listen       80;
    location / {
        proxy_pass      http://appsrvs/ 

;
        index  index.html index.jsp index.htm;
    }
}
5、安装memcached,并启动
yum install memcached -y
systemctl start memcached
6、测试结果,

在浏览器中访问http://172.16.250.200/test,结果如下所示,其session ID在负载均衡环境中保持不变。
查看结果如下图所示:


发现两个session已经相同了,此处使用的memcached使用的是n1服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值