在上一个实验当中,实现了服务器的会话保持,但当一个服务器挂掉后,之前的数据会丢失, 这个时候就要用到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对象存储特定用户会话所需的属性及配置信息。
这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。
当会话过期或被放弃后,服务器将终止该会话。
Session对象最常见的一个用法就是存储用户的首选项。
例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
4.具体实现过程如下
前提:nginx服务器实现了tomcat均衡负载模块,
(1)查看server1和server2的tomcat服务是否开启
(2)从真机上面拷贝memcache-session到server1和server2这两个tomcat服务器上面指定目录
(3)删除多余的包
(4)两个rs服务器发布页面加入实现session共享的内容
(5)因为从momcache中读取数据,因此要打开memcached
[root@server2 conf]# yum install memcached.x86_64
(6)server1、2开启tomcat服务
cd /usr/local/tomcat/bin/
./startup.sh开启tomcat服务
(8)监控日志查看端口
(9)测试有没有实现数据共享(通过memcache)
在浏览器里面输入192.168.0.11/test.jsp,注册信息属于动态处理
开始注册信息(多注册几个),一直是tomcat2服务器接受请求
然后关闭server2的tomcat服务
输入192.168.0.11/test.jsp
开始注册信息(多注册几个),发现同一个用户注册所有的数据会同步过来
如果两个都好着,不会同步,一旦一个宕机,数据会立马同步到另外一个上面
注:若不行在重启一下apache。
(10)查看信息存储主机位置
此信息是交叉存储的,为了防止单个机器挂断所有信息失去