Tomcat/Memcached实现会话保持(SessionServer)
2017-11-07 14:13
911 查看
前言
在实际生产中,我们常常会面临这样一个问题,那就当我们通过负载均衡调度器进行调度处理时,不同的后端主机需要对客户的访问会话进行状态保持。也就是说,当调度器将用户的请求进行代理调度时,用户与后端服务器之间建立的Session会话不能丢失,各主机之间在处理用户请求时,都要能够对用户的会话进行处理。那么被调度的不同后端主机是如何共享用户的Session呢?接下来,我们来介绍一种常见的方式,也是实际生产中经常使用到的一种方式,使用memcached配合tomcat搭建Seesion Server。
实验拓扑结构
首先来看一下,下面的拓扑结构。序号 | 担任角色 | 主机名 | 地址 | 功能描述 | 对应软件版本 |
---|---|---|---|---|---|
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包的存放位置
webapp包的存放位置
在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查看调度结果,以及会话的保持效果。
总结
memcached是一款很常见的缓存服务,通常会结合Tomcat实现Session缓存以用于进行会话保持。但是,memcached本身只能存储序列化的内容,并且所有的存储都存储在内存中,不具备持久性存储的特性,因此在实际的使用过程中通常都会有两个memcached服务器来以主备模式提供服务。相比于memcached服务,redis也能够实现类似的功能,而且redis还具有持久化存储的特性,这样能够提供更加稳定的服务,关于redis的使用,我们以后会继续介绍。
相关文章推荐
- tomcat cluster和tomcat+memcached实现Session会话保持
- Nginx+Tomcat+memcached实现session server
- Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话 推荐
- session会话保持之session服务器-tomcat + msm + memcached
- httpd+tomcat+memcached实现session保持
- 为什么要使用tomcat+memcache实现session共享而不使用会话保持
- 实现tomcat基于session会话保持
- httpd+tomcat+memcached实现session保持
- tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)
- tomcat session server基于memcached的实现
- Tomcat(三) Tomcat安装配置:Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群
- Nginx+Tomcat+Memcached实现会话保持
- Tomcat会话保持之session server
- Session Cache Server 及Tomcat集群架构之二:用Memcached 实现简单Session Cache Server
- Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)
- Tomcat(三) Tomcat安装配置: Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群
- tomcat使用memcached完成集群(session共享实现方式)
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
- 分布式Session共享(二):tomcat+memcached实现session共享
- 详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结