lnmp架构(九)——nginx +tomcat+memcache实现在tomcat中的session共享

一、什么是session

Session是指会话控制,是保存在服务器上一种机制,当客户端访问服务器的时候,服务器会把信息以某种形式记录在服务器上,恰恰和Cookie相反。

Session经常用于会话过程中保证一定状态的信息,比如,用户在登录的时候,需要浏览web应用程序,并且存储是在页面重新被加载的时候,Session始终保持着任何时间都可以在设备上进行访问,但是随着用户的增多,Session的服务器内存也要不断加大,Session也会使用持久方法的限制。

session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

1.1 session的工作原理

http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你
在这里插入图片描述
当客户端向服务器发出请求的时候,服务器会保存一个session,当session第一次被启用时,同时也是在客户端上形成一个cookie文件,首次使用session_start()函数,并且PHP去加载已经储存的session变量,并且通过函数去注册变量,当脚本执行完毕后,会自动保存到session库中,已方便下次使用。

1.2 cookie和session结合使用

web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:

1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式

1.3 Nginx+tomcat+memcached

使用nginx作为前端服务器来实现tomcat负载均衡及高可用,同时基于jsp的动态特征,我们将引入memcache来保持网页在连接过程中的session保持,利用memcached把多个tomcat的session集中管理 图解:
在这里插入图片描述客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;tomcat 把会话通过组播的方式复制到集群各节点;所有节点共享会话;

当memcached有两个时可以采用交叉存储,可以更好的避免单点故障

在这里插入图片描述

二、session共享具体实现

在上一篇博客中,我们已经实现了会话保持,但是仍旧出现问题,当一台tomcat服务器宕机,另一台服务器无法获取数据,造成数据丢失,现在我们就来解决这个问题。

实验环境

主机(版本:ip) 功用
虚拟机server1(rhel6.5:172.25.2.1) lnmp环境主机+tomcat1服务器
虚拟机server2(rhel6.5:172.25.2.2) tomcat2服务器
真机(rhel7.3:172.25.2.250) 测试机

1、在server2上,安装memcahce,并开启服务。

[root@server2 ROOT]# yum install memcached -y
[root@server2 conf]# /etc/init.d/memcached start

在这里插入图片描述

在这里插入图片描述

2、将所需的安装包都放到server1和server2/usr/local/tomcat/lib目录下

[root@server2 lib]# pwd
/usr/local/tomcat/lib
[root@server2 lib]# mv jar/* .
[root@server2 lib]# rm -fr jar
[root@server2 lib]#  rm -fr  memcached-session-manager-tc6-1.6.3.jar

在这里插入图片描述
在这里插入图片描述
3、编辑配置文件context.xml

  • xml常用于数据存储和传输,文件后缀为 .xml

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言 。

标记,指计算机所能理解的信息符号;
通过此种标记,计算机之间可以处理包含各种信息的文章等
1 、标记,指计算机所能理解的信息符号;
2、 通过此种标记,计算机之间可以处理包含各种信息的文章等。
XML设计用来传送及携带数据信息,不用来表现或展示数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。而HTML语言则用来表现数据

[root@server1 lib]# cd /usr/local/tomcat/conf
[root@server1 conf]# vim  context.xml
 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
 35 memcachedNodes="n1:172.25.2.1:11211,n2:172.25.2.2:11211"  
 36 failoverNodes="n1" (在172.25.2.2"改为"n2"
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  />

在这里插入图片描述

在这里插入图片描述
server2上,

在这里插入图片描述
4、启动server1和server2的tomcat和memcache

  • 注意:如果tomcat之前是开启的,要先关闭,在开启。
[root@server1 conf]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh
[root@server1 bin]# /etc/init.d/memcached status
[root@server1 conf]# /etc/init.d/memcached start

5、测试:访问测试页http://172.25.2.1/test.jsp

在这里插入图片描述

我们此时宕掉server2,再次访问测试页面,还可以看到数据

在这里插入图片描述在这里插入图片描述
也可以监控日志,查看到数据:

cd  /usr/local/tomcat/logs/
tail -f  catalina.out

在这里插入图片描述

发布了125 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ranrancc_/article/details/104221866