Tomcat/Memcached实现会话保持(SessionServer)

简介:

前言

        在实际生产中,我们常常会面临这样一个问题,那就当我们通过负载均衡调度器进行调度处理时,不同的后端主机需要对客户的访问会话进行状态保持。也就是说,当调度器将用户的请求进行代理调度时,用户与后端服务器之间建立的Session会话不能丢失,各主机之间在处理用户请求时,都要能够对用户的会话进行处理。
        那么被调度的不同后端主机是如何共享用户的Session呢?接下来,我们来介绍一种常见的方式,也是实际生产中经常使用到的一种方式,使用memcached配合tomcat搭建Seesion Server。

实验拓扑结构

    首先来看一下,下面的拓扑结构。

tomcat+memcached.jpg
序号 担任角色 主机名 地址 功能描述 对应软件版本
A Nginx均衡调度器 nginx 172.18.2.66 利用Nginx的调度功能首先负载均衡 Nginx-1.10.2
B web服务器 tomcat1 172.18.2.77 安装tomcat,用来提供动态web服务 tomcat-7.0.69-10.e17
C web服务器 tomcat2 172.18.3.77 安装tomcat,用来提供动态的web服务 tomcat-7.0.69-10.el7
D SessionServer session1 172.18.253.175 安装memcached,提供Session存储服务,同时充当SessionServer的主节点 memcached-1.4.15
E SessionServer session2 172.18.254.5 安装memcached,提供session存储服务,同时充当SessionServer备用节点 memcached-1.4.15

安装相应的软件

    首先同步所有主机的主机时间,在各个主机中安装所需要的应用软件。

[root@nginx ~]$yum install nginx

[root@tomcat1 ~]#yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp  -y

[root@tomcat2 ~]#yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp  -y   

[root@session1 ~]# yum install -y memcached

[root@session2 ~]# yum install -y memcached

    启动相应的服务。

在tomcat中添加简单的站点测试程序

    在tomcat中,添加简单的示例应用程序。

[root@tomcat1 ~]#mkdir -pv /usr/share/tomcat/webapps/test/WEB-INF/lib

      然后在test目录下添加一个简单的index.jsp文件。并将内容进行适当的修改,以区分两个不同的服务。

<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatA.pojun.tech</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("pojun.tech","pojun.tech"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

配置Nginx的反向代理

        对Nginx进行配置,使其能够将用户的请求均衡调度到后端的WebServer。

#
# The default server
#

upstream tcsrvs{
    server 172.18.2.77:8080;
    server 172.18.3.77:8080;
    }
    
    
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
	proxy_pass http://tcsrvs;		
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
 }

        此时,在浏览器地址栏输入http://172.18.2.66/test/就能看到,浏览器的请求已经被调度到TomcatA 和TomcatB 两台主机上了。

配置tomcat支持memcached服务

        接下来,我们就开始给Tomcat配置支持memcached的服务支持,可以参考官方文档的介绍。 

https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

        在官方指导文档上下载自己需要的jar包,并存放在指定值得目录下,两个tomcat同样的配置。 可参考下图。

tomcat包的存放位置

tomcat%E5%8C%85%E5%AD%98%E6%94%BE%E4%BD%

webapp包的存放位置

serializer%E5%8C%85%E5%AD%98%E6%94%BE%E4

        在tomcat的server.xml配置文件中的Host节点下,加入如下内容。

<Host name="localhost"  appBase="webapps"   unpackWARs="true" autoDeploy="true">

    <Context path="/test" docBase="/usr/share/tomcat/webapps/test" reloadable="true">
          <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                  memcachedNodes="n1:172.18.253.175:11211,n2:172.18.254.5:11211"
                  failoverNodes="n2"
                  requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                  transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
          />
    </Context>


    ...

</Host>

配置成功之后,将tomcat重新启动就好。

测试会话保持与均衡调度

使用浏览器访问http://172.18.2.66/test 查看调度结果,以及会话的保持效果。

http://ot2trm1s2.bkt.clouddn.com/Linux/2017-11-07-linux-pro-command-7/session_server.gif

总结

        memcached是一款很常见的缓存服务,通常会结合Tomcat实现Session缓存以用于进行会话保持。但是,memcached本身只能存储序列化的内容,并且所有的存储都存储在内存中,不具备持久性存储的特性,因此在实际的使用过程中通常都会有两个memcached服务器来以主备模式提供服务。
        相比于memcached服务,redis也能够实现类似的功能,而且redis还具有持久化存储的特性,这样能够提供更加稳定的服务,关于redis的使用,我们以后会继续介绍。





     本文转自Eumenides_s 51CTO博客,原文链接:
http://blog.51cto.com/xiaoshuaigege/1979587
,如需转载请自行联系原作者


相关文章
|
应用服务中间件
tomcat重启时保持会话关闭
tomcat重启时保持会话关闭
213 0
|
SQL Java 关系型数据库
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统
871 0
IDEA+Java+JSP+Mysql+Tomcat实现Web商品信息管理系统
|
域名解析 运维 负载均衡
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
【运维知识进阶篇】Tomcat集群实战之部署zrlog博客(Tomcat服务安装+静态资源挂载NFS+Nginx负载均衡+HTTPS证书+Redis会话保持)
663 1
|
SQL Java 关系型数据库
IDEA+Java+JSP+Mysql+Tomcat实现Web学生成绩管理系统
IDEA+Java+JSP+Mysql+Tomcat实现Web学生成绩管理系统
1138 1
IDEA+Java+JSP+Mysql+Tomcat实现Web学生成绩管理系统
|
Ubuntu 关系型数据库 MySQL
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
611 0
Linux:Ubuntu安装jdk、tomcat、mysql,以及实现Tomcat开机自启动
|
应用服务中间件 Windows
反向代理方式实现IIS与Tomcat整合
反向代理方式实现IIS与Tomcat整合
622 0
反向代理方式实现IIS与Tomcat整合
|
IDE Java 应用服务中间件
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
247 0
IDEA/Tomcat 原理:如何将 Tomcat 集成到 IDEA?实现由传统部署延伸到热部署 Java EE 项目?
|
前端开发 应用服务中间件
IDEA实现热部署前端界面(Tomcat、IDEA)
IDEA实现热部署前端界面(Tomcat、IDEA)
609 0
IDEA实现热部署前端界面(Tomcat、IDEA)