LNMP架构之动态缓存(nginx +tomcat+memcache) 实现session共享和会话保持——memcache在tomcat中实现session交叉存放

news/2025/2/26 13:20:55

在上一个实验当中,可以实现会话保持了
当其中一个tomcat服务器坏了,由于nginx负载均衡服务器在tomcat1和tomcat2之间实现了轮询
如果用户1在tomcat1服务器上存储的数据,但是当tomcat1这个服务器挂了
客户就会去访问tomcat2的服务器,但是自己的数据在tomcat1上面
这个时候就要用到memcache这个存储节点,它属于交叉存储
tomcat1和tomcat2上面都有memcache存储(把数据缓存在内存当中)
分别为memcache1和memcache2
这两个存储节点属于存储节点
当tomcat1挂了之后,客户1就会去访问tomcat2对应的memcache
这时候会把用户放在memcache1的数据全部放到memcache2上面
如果tomcat服务器都好着,memcache不会同步数据过,一旦坏了立刻同步数据过来
这就是memcache-session交叉存储的好处

1.什么是会话保持?

会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。用人话来表述就是:在一次会话过程中发起的多个请求都会落到同一台机器上。

2.会话(session)与连接(connection)之间的区别

在讨论负载均衡的时候,如果我们不细加讨论的话,很容易将会话与连接混淆。

(1)连接:我们都知道TCP/IP协议中经常提到的:”三次握手,四次挥手“的问题。自然也知道客户端和服务器端是经过三次握手以后,建立了连接(connection)。当它们建立了连接以后,那么客户端就可以向服务端发送多次的请求。如果客户端和服务器端需要断开连接,那么就需要经过四次的挥手过程才能够断开连接。

(2)会话:如果用户需要登录,那么可以理解为经过三次握手以后,客户端与服务器端建立的就是会话(session)。如果用户不需要登录,那么可以理解为经过三次握手以后,客户端与服务器端建立的就是连接(connection)。

连接(会话)删除:一般来说,所有的厂商都会对负载均衡服务器的最大并发连接数有限制。每一个连接都是有时间限制的。如果在规定的时间内某个连接不再有请求,那么这个连接就会被清除掉。删除了连接以后,客户端的请求将无法继续发往同一个后端的服务器,这时候就需要遵循负载均衡器的流量分发策略。换句话说,所谓的会话保持机制,就是将客户端与服务器之间建立的多个连接,都发送到相同的服务器进行处理。如果在客户端和服务器之间部署了负载均衡设备,那么可能出现的一种情况就是这多个连接可能会被转发到不同的服务器进行处理。

3.什么是session?

Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session
客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了
session共享原理及实现共享
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你

session被用于表示一个持续的连接状态,在网站访问中一般指代客户端浏览器的进程从开启到结束的过程。
session其实就是网站分析的访问(visits)度量,表示一个访问的过程。
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间
只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid
如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中)
并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息
如果存在则直接使用该sessionid,若不存在则重新生成新的 session。
这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。
但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。

session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

4.具体实现过程如下

  • (1)查看server1和server2的tomcat服务是否开启,8080端口
    在这里插入图片描述
    在这里插入图片描述
  • (2)在server2上面:
yum install memcached -y 安装缓存的服务

在这里插入图片描述

  • (3)server1上面:
查看tomcat下当前的jar包
cd /usr/local/tomcat/bin

在这里插入图片描述
在这里插入图片描述

  • (4)从真机上面拷贝memcache-session到server1和server2这两个tomcat服务器上面
    在这里插入图片描述
  • (5)在server1上面
将拷贝过来的jar目录下面所有jar包移到当前目录

在这里插入图片描述

删除多余的包

在这里插入图片描述

  • (6)在server2上面:
cd /usr/local/tomcat/lib

在这里插入图片描述

  • (7)在server1上面:
cd /usr/local/tomcat/
ls
cd conf/
ls
vim server.xml编辑tomcat的配置文件,解释了三个端口
vim content.xml
cd ..
cd webapps/
cd ROOT/
ls
cd WEB-INF/
vim web.xml
vim content.xml
加入实现session共享的内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.0.1:11211,n2:172.25.0.2:11211"
failoverNodes="n1" 
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • (8)在server2上面:
vim content.xml
加入
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.0.1:11211,n2:172.25.0.2:11211"
failoverNodes="n1" 
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

在这里插入图片描述
在这里插入图片描述

  • (9)在server1上面;
netstat -antlupe
cd /usr/local/tomcat/bin/
./startup.sh开启tomcat服务

在这里插入图片描述

  • (10)在server2上面:
/etc/init.d/memcached status
/etc/init.d/memcached start开启memcache服务
cd /usr/local/tomcat/bin/
./shutdown.sh
./startup.sh开启tomcat服务
netstat -antlupe

在这里插入图片描述

  • (11)测试:看有没有实现数据共享(通过memcache)
在浏览器里面输入172.25.12.1/test.jsp,注册信息这个属于动态处理
开始注册信息(多注册几个),一直是tomcat1服务器接受请求
然后关闭server2的tomcat服务
输入172.25.12.1/test.jsp
开始注册信息(多注册几个),发现同一个用户注册所有的数据会同步过来
如果两个都好着,不会同步,一旦一个宕机,数据会利马同步到另外一个上面
在server1上面:

如果两个tomcat都好着,数据只会存入好着的存储当中,不会同步到另外一个


http://www.niftyadmin.cn/n/2928379.html

相关文章

利用HAProxy实现——负载均衡,添加日志,访问控制,动静分离,读写分离

haproxy类似nginx、apache 均是7层负载&#xff1a;动静分离&#xff0c;比较智能&#xff0c;可以实现高可用负载均衡支持虚拟主机 和nginx很像&#xff0c;但是haproxy&#xff08;不可以缓存&#xff09;和nginx&#xff08;可以缓存&#xff09;&#xff0c;二者都是httpd的…

Android NDK 开发之菜鸟

为什么80%的码农都做不了架构师&#xff1f;>>> 由于本人最近在帮一个朋友看NDK开发&#xff0c;期间遇到过一些不懂的问题&#xff0c;而在网上又没有找到什么好的解决方案&#xff1b;因此记录下来供参考。 首先呢&#xff0c;我使用的工具是Android Studio 一般…

HAproxy七层负载均衡介绍

1.什么是haproxy&#xff1f; HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理 HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理 HAProxy运行在…

jqgrid静态数据获取及显示

2019独角兽企业重金招聘Python工程师标准>>> 引入必要文件 在页面中引入jquery.jqGrid.min.js&#xff0c;jquery.js及相关的样式文件 在页面里面定义 <table></table>用于展示数据的表格区&#xff0c;同时加上一个<div></div>做为分页拦…

新建用户组、用户、用户密码、删除用户组、用户(适合CentOS、Ubuntu系统)

这个知识点&#xff0c;模糊了好久。&#xff01;&#xff01;&#xff01; 生产中&#xff0c;习惯如下&#xff1a; useradd&#xff0c;默认会将自身新建用户&#xff0c;添加到同名的用户组中。如&#xff0c;useradd zhouls&#xff0c;执行此命令后&#xff0c;默认就添加…

mySQL (关系型数据库管理系统)的基础知识详解

1.什么是数据库? 数据库&#xff0c;简而言之可视为电子化的文件柜——存储电子文件的处所&#xff0c;用户可以对文件中的数据进行新增、查询、更新、删除等操作 所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集…

iOS程序进入后台,延迟指定时间退出

程序进入后台,延迟指定时间退出 正常程序退出后&#xff0c;会在几秒内停止工作&#xff1b;要想申请更长的时间&#xff0c;需要用到beginBackgroundTaskWithExpirationHandlerendBackgroundTask一定要成对出现 { NSTimer *_timer; int aa; __block UIBackgroundTaskIdentif…

企业级mysql数据库集群实战——mysql的异步复制(基于position的主从复制)

1.MYSQL的主从复制&#xff08;异步复制&#xff09;的基本信息 特别提醒&#xff1a;在数据库中进行操作时&#xff0c;事实上大小写都是通用的&#xff0c;但是作为一个专业人士 &#xff0c;尽量还是使用大写 异步复制&#xff08;主从复制&#xff09;master节点不会关心s…