Linux项目_Lnmp_7_Sticky插件&Session共享

Linux项目_Lnmp_7_Sticky插件

一.Sticky介绍


1.什么是Sticky

Amaze UI JS 插件

2.Session共享

Linux项目_Lnmp_7_Sticky插件&Session共享

(1)原理

交叉存储,t1存放数据在m2上,t2存放在m1上,
t1坏掉之后,t2可以读取m2上的数据,
t2坏了之后,t2拥有自己的内存空间,t1可以读取m1上的数据

t1 t2 t3 t4….多个tomcat反感:
开发tomcat和memcache之间的逻辑层,分布式存储

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将 session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。

(2)类型

1.基于NFS的Session共享

NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。

这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件,会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。

2.基于数据库的Session共享

首选当然是大名鼎鼎的MySQL数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。

3.基于Cookie的Session共享

这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式,统一种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现用户的Cookie化Session 在多服务间的共享访问。

这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。

4.基于Memcache的Session共享

Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势,目前本人所经历的项目达到2000/秒 平均查询,并且服务器CPU消耗依然不到10%。

另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力。

二.实验环境部署


1.环境布置

操作系统 RHEL6.5
VM1 server8 - - - - - 172.25.0.8
VM2 server9 - - - - - 172.25.0.9

2.建立测试jsp页面

[server8]:
cd /usr/local/tomcat/webapps/ROOT/
vim test.jsp
Linux项目_Lnmp_7_Sticky插件&Session共享

scp test.jsp [email protected]:/usr/local/tomcat/webapps/ROOT/

3.安装nginx1.10.1

由于在lnmp系列第四篇Tomcat搭建中的nginx版本过高不支持Sticky,所以在此安装低版本的nginx

(1)关闭nginx

cd /usr/local/openresty/nginx
sbin/nginx -s stop

(2)解压

tar zxf nginx-1.10.1.tar.gz
tar zxf nginx-sticky-module-ng.tar.gz
cd nginx-1.10.1

删除版本号:
vim src/core/nginx.h
14 #define NGINX_VER “nginx”

纯净安装:
vim auto/cc/gcc
179 #CFLAGS=”$CFLAGS -g”

cd /usr/local/lnmp/nginx/
rm -fr *

(3)源码安装

cd /mnt/nginx-1.10.1
./configure –prefix=/usr/local/lnmp/nginx/ –with-http_ssl_module –with-http_stub_status_module –with-threads –with-file-aio –user=nginx –group=nginx –add-module=/mnt/nginx-sticky-module-ng
make
make install

(4)配置文件

源码安装低版本的nginx,支持sticky但不支持jdk,
所以在此要把之前添加有关jdk的配置信息注释掉

cd /usr/local/openresty/nginx/conf
cp nginx.conf /usr/local/lnmp/nginx/conf/
cd /usr/local/lnmp/nginx/conf/
vim nginx.conf
Linux项目_Lnmp_7_Sticky插件&Session共享
Linux项目_Lnmp_7_Sticky插件&Session共享
Linux项目_Lnmp_7_Sticky插件&Session共享

nginx -t
Nginx

(5)检测

浏览器访问http://172.25.0.8/test.jsp
Linux项目_Lnmp_7_Sticky插件&Session共享

输入东西
cd /usr/local/tomcat/logs
cat catalina.out 日志文件
Linux项目_Lnmp_7_Sticky插件&Session共享

bin/shutdown.sh
浏览器上会自动分配给7,重新启动后数据回不来
Linux项目_Lnmp_7_Sticky插件&Session共享
Linux项目_Lnmp_7_Sticky插件&Session共享

重新启动
bin/startup.sh

三.Session共享


server8&9:
yum install -y memcached.x86_64
/etc/init.d/memcached start
cd /usr/local/tomcat
bin/shutdown.sh

真机:
scp jar/* [email protected]:/usr/local/tomcat/lib/
scp jar/* [email protected]:/usr/local/tomcat/lib/

(1)配置文件

server6&server7:
cd /usr/local/tomcat/lib
rm -fr memcached-session-manager-tc6-1.6.3.jar

cd /usr/local/tomcat/conf
vim context.xml
Linux项目_Lnmp_7_Sticky插件&Session共享

Linux项目_Lnmp_7_Sticky插件&Session共享

(2)启动

重启tomcat
cd /usr/local/tomcat
bin/startup.sh

(3)测试

浏览器访问
http://172.25.36.6/test.jsp
输入一个name和key出像一段id
在server1上
telnet localhost 11211
get CB1AD6A83141CB086B484FF030BEB67B-n1
会出现id信息

Linux项目_Lnmp_7_Sticky插件&Session共享

关闭server7的tomcat
浏览器会自动调转到server6

参考信息


Sticky文档
http://amazeui.org/javascript/sticky?_ver=2.x
session原理及实现共享
https://blog.csdn.net/han_cui/article/details/68947396