目录
友情提示:
该文章为本人实践过程中所写,其中穿插着一些其他的知识。所以本文可能对 session一致 讲的不是很清楚,仅供参考,大佬勿喷。
1.准备工作:
我们需要三台虚拟机,分别为:(根据自己情况所定)
主机名 | IP |
nginx1 | 192.168.96.65 |
node2 | 192.168.96.62 |
node3 | 192.168.96.63 |
nginx1需要装有nginx(可查看nginx安装文章)
2.session共享
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含session id,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。
3.session一致性解决方案
3.1、session复制
tomcat 本身带有复制session的功能。(基本不用)
3.2、共享session
需要专门管理session的软件,
memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。
3.3.安装memcached
3.3.1node2和node3上安装jdk和tomcat
这里只演示node2上的安装过程,node3同样的操作。
通过Xftp软件上传至虚拟机(Xshell,Xftp自行下载)
jdk安装过程:
[root@nginx1 apps]# rpm -ivh jdk-7u80-linux-x64.rpm
配置环境变量
[root@nginx1 apps]# find / -name '*java*'
#可以看出/usr/java/jdk1.7.0_80/
[root@node1 jdk1.7.0_80]# vim /etc/profile
#加入以下两行代码:
export JAVA_HOME=/usr/java/jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
文件生效:
[root@nginx1 apps]# source /etc/profile
[root@nginx1 apps]# jps
13894 Jps #说明jdk安装配置成功
tomcat安装
解压apache-tomcat-7.0.69.tar.gz
修改apache-tomcat-7.0.69/webapps/ROOT/index.jsp, dG全删后,添加:
from 192.168.96.62 session=<%=session.getId()%>
另外一台(node3)同样的安装配置操作。
然后分别访问node2和node3都可以正常访问。
修改nginx1的nginx.conf文件
gzip on;
upstream rses{ #定义了提供服务的服务器IP组,实现了负载均衡
server 192.168.96.62:8080; #通过8080端口访问node2
server 192.168.96.63:8080;
}
server {
listen 80;
server_name www.nuclwt.com; #通过域名实现的虚拟主机
location / {
root html;
index index.html index.html;
}
location /toms { #locattion配置
proxy_pass http://rses/; #反向代理至rses
}
}
涉及到的配置还请参考以下文章:
nginx基于域名实现虚拟主机(重点)
nginx.conf文件参数详解(二)——location块(重点)
3.3.2nginx1上安装memcached
安装libevent
yum install libevent -y
安装memcached
yum install memcached -y
启动memcached
memcached -d -m 128m -p 11211 -l 192.168.96.65 -u root -P /tmp/
启动时 -l:IP(使用自己的IP)
-d:后台启动服务
-m:缓存大小
-p:端口
-l:IP
-P:服务器启动后的系统进程ID,存储的文件
-u:服务器启动是以哪个用户名作为管理用户
3.4 配置session共享
拷贝jar到tomcat的lib下,jar包如下(自行下载)
配置tomcat,每个tomcat里面的context.xml中加入
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.20.95:11211" #IP为nginx1的IP
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
tomcat添加jar包和配置信息之后需要重启
测试:
重启后,可以通过域名 www.nuclwt.com/toms 访问,可以发现我们访问的服务器不一样(IP不同),它的session值是相同的。都为:EA3BA22472D2DE4E8FE73A3729A2ED4B-n1