tomcat基于session会话保持以及msm会话保持

实验一、基于tomcat集群会话保持

一、实验环境:

一台nginx服务器,两台tomcat集群,出于实验的原因,我就把nginx也放在其中一台的tomcat服务器上。也就是一共两台机器,都是centos7的环境。

二、实验原理:

DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护。集群增量会话管理器的职责是将某节点的会话该变同步到集群内其他成员节点上,它属于全节点复制模式,所谓全节点复制是指集群中某个节点的状态变化后需要同步到集群中剩余的节点,非全节点方式可能只是同步到其中某个或若干节点。在集群中全节点会话复制的一个大致步骤如图所示,客户端发起一个请求,假设通过一定的负载均衡设备分发策略分到其中一个结点node1,如果还未存在session对象的话web容器将会创建一个会话对象,接着执行一些逻辑处理,在对客户端响应之前有个重要的事情是要把session对象同步到集群中其他节点上,最后再响应客户端。当客户端第二次发起请求时,假如分发到node3节点上,由于同步了node1的session会话,所以在执行逻辑时并不会取不到session的值。如果删除某个会话对象,则要同时通知其他节点把相应会话删除,如果修改了某个会话的某些属性也同样要更新到其他节点的会话中。

三、实验拓扑图:

四、实验步骤:

第一步:搭建nginx服务

配置文件如下:vim  /etc/nginx/nginx.conf

第二步:安装tomcat环境,这个不需要说了,注意的地方就是先需要实现Java环境。

第三步:配置tomcat,支持会话保持,两边的tomcat都是一样的配置。

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="172.17.254.171" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="/"/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

第四步:编写一个小教本进行测试。

Tomcat1: vim /usr/local/tomcat/webapps/test/index.jsp

<%@ page language="java" %>

<html>

<head><title>TomcatA</title></head>

<body>

<h1><font color="blue">TomcatA </h1>

<table border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("abc","abc"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

Tomcat2:

<%@ page language="java" %>

<html>

<head><title>TomcatB</title></head>

<body>

<h1><font color="blue">TomcatB </h1>

<table border="1">

<tr>

<td>Session ID</td>

<% session.setAttribute("abc","abc"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr>

</table>

</body>

</html>

第五步:需要在当前脚本所在目录下自定义一个WEB-INF的目录,加上一个分布式存储的标签

mkdir  test/WEB-INF

cp  /usr/local/tomcat/conf/web.xml   /usr/local/tomcat/webapps/test/WEB-INF/

vim  web.xml

第六步:测试结果,发现结果都是一样的,说明实验成功

易错点:tomcat是通过组播的方式复制session的,所以组播地址最好加上路由,避免自动绑定的ip地址不在一个网段上,不然就把Receiver的IP自动获取改成自己手动配置。

实验二:tomcat结合memcached实现seesion共享

一、实验环境:两台tomcat,一台nginx负载均衡器,两台memcache缓存

二、实验原理:虽然由tomcat自身带的机制可以实现session复制,但是这只是能实现小并发的情况,大并发的session复制对于tomcat来说资源消耗太大,每一个会话复制上千台机器负载太大,所以需要新的机制来实现这个问题,这就是我们所说的memcache缓存可以解决的问题,也就是我们常说的memcached-session-manager-2.1.1.jar,简称msm.把用户访问的session都存储到一台memcache上,就能实现数据的一致性。

三、实验拓扑图:

四、实验步骤:

第一步:下载tomcat需要的支持memcache的库文件。每个tomcat都需要。

下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${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

第二步:定义tomcat需要的会话管理器。

分别在两个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.100.9:11211,n2:172.16.100.10:11211"

failoverNodes="n1"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

</Context>

第三步:提供测试页面

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

tomcatA:

# mkdir -pv /usr/local/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</font></h1>

<table 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/local/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 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>

第四步:配置反向代理

vim  /etc/nginx/nginx.conf

upstream tomcat_cluster {

#ip_hash;

server  172.17.254.171:8080 weight=1;

server   172.17.254.181:8080  weight=2;

}

server {

listen       80;

server_name  xiaomi;

root         /usr/local/tomcat/webapps/ROOT;

# Load configuration files for the default server block.

include /etc/nginx/default.d/*.conf;

index index.jsp;

location ~* \.(jsp|do)$ {

proxy_pass http://tomcat_cluster;

}

测试页面:

时间: 2024-07-30 07:11:04

tomcat基于session会话保持以及msm会话保持的相关文章

实现tomcat基于session会话保持

实验环境: 两台服务器,分别实现java 其中一台作为nginx代理 实验原理图: 一.实现java环境 1.实现java的运行环境 (1)安装 JDK 可以在网上下载包 yum  localinstall  jdk-8u144-linux-x64.rpm 2.下载tomcat包解压 tar xvf apache-tomcat-8.5.11.tar.gz mv apache-tomcat-7.0.78 /usr/local/tomcat 3.创建环境配置脚本 vim /etc/profile.d

Nginx+LAT(apache+tomcat)的实现和使用memcached保存tomcat的session会话

Nginx+LAT(Apache+tomcat)的实现和Apache反向代理和负载均衡tomcat的不同方式以及使用memcached保存tomcat的session会话 一.Nginx+LAT(Apache+tomcat)的环境结构; 1.Nginx +Apache实现负载均衡用户请求至tomcat,其中Nginx是负载均衡调度器,Apache和tomcat在同一台机器上,Apache将关于JSP的请求发送至tomcat. 2.实验结构图: 3.环境介绍,在两台CentOS7上都安装Tomca

tomcat的session会话保持方案

基础知识 ?? tomcat ????tomcat是Apache软件基金会的Jakarta项目中的核心项目,最新的Servlet和JSP规范能够在Tomcat中很好的表现.作为一个免费的开放源代码的Web应用服务器,属于轻量级的应用服务器,在中小型系统和并发量不是很大的场景下被广泛使用,是开发和调试JSP代码的首选.实际上而言,tomcat是Apache服务器的拓展,但是可以独立运行,tomcat可以独立的去处理html和jsp页面.?? memcached ????Memcached 是一个高

Tomcat基于MSM+Memcached实现Session共享

前言 在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享. 相关介绍 MSM MSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用Memcached存取Session,以实现高可用. 工作原理 Sticky Session(黏性) 模式

tomcat实现session会话保持

基础知识 tomcat是Apache软件基金会的Jakarta项目中的核心项目,最新的Servlet和JSP规范能够在Tomcat中很好的表现.作为一个免费的开放源代码的Web应用服务器,属于轻量级的应用服务器,在中小型系统和并发量不是很大的场景下被广泛使用,是开发和调试JSP代码的首选.实际上而言,tomcat是Apache服务器的拓展,但是可以独立运行,tomcat可以独立的去处理html和jsp页面 session ?在计算机中,尤其是在网络应用中,称为"会话控制".Sessio

Tomcat实现session会话保持(三)

在后端用session server做session存储服务器 使用memcache做后端session server Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信.这里主要是做为tomcat

Tomcat实现session保持的三种方式、使用msm方式搭建jsp网站

Tomcat简单的来说类似于php的功能,主要实现java程序的编译,最后呈现给用户的是html格式的代码,使用用户可以在浏览器中访问.Tomcat是Java语言研发的,所以依赖于java的虚拟机(jvm). 一.使用前端调度器实现实现session保持 实现的原理如下图,会话保持使用前端的调度器实现.例如:使用Ngnix调度时,使用ip_hash算法就可以实现. 配置步骤: 1.安装配置 Tomcat 操作系统: CentOS 6,5 目标主机:172.16.10.122  172.10.10

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话

巧用Session Manager还原Firefox丢失会话

今天Firefox Crash之后,我的会话全部丢失了.按照以往来说,Firefox在重新启动之后或者Crash之后会有一个会话还原的页面.但今天确实没有.后来我进行Google查阅,试了很多种办法.终于找到一种非常快速方便的还原步骤. 首先简单说明下Firefox记录会话的机制,他会在每个用户的Profile下放入相应的session.js和session.bak,一般只需要用到js即可,在每次重启Firefox的时候他会去检索这些文件,然后根据里面的条目来进行自动加载.但有时候,Firefo