memcache+tomcat7.0.37+nginx实现session共享
一、session工作原理
由于http是无状态的协议,当我们访问了页面A,然后访问页面B,http无法确定这2个页面的访问是来自同一个人。因此,我们要用cookie或session来跟踪用户,根据授权和用户身份来显示不同的页面。例如:用户a和b同时进行了把商品加入购物车,这时我们不能区分a和b,所以需要一个session ID来维持这个过程。Cookie是服务器发送给客户端的,并且把信息保存在客户端的一个文件中,里面包含用户访问信息,便于下一此访问直接对到对应的后端服务器。Cookie可以被禁用,而session id相当于自己的一个属性,代表自己的身份。
我们使用session共享,是为了防止tomcat服务器重启或掉了之后的数据丢失情况;维持多个节点之间数据的一致性。
以下为基于memcache缓存的session共享: tomcat1和tomcat2将session分别存储在memcached2和memcached1中(实现交叉存储),当memcached2不可用时,才将tomcat1的数据存储在memcache1中,这样好处是,当tomcat1和memcached1同时崩溃时也不会丢失session会话,避免单点故障。
nginx ---> tomcat ---> memcached
二、实验步骤
Server6: 172.25.2.6 nginx tomcat memcached
Server1: 172.25.2.1 tomcat memcached
真机中进行测试。
1) 在server6和server1中安装jdk。
---> tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
---> cd /usr/local
---> ln -s jdk-7u79/ java # 做一个软链接,方便使用
---> vim /etc/profile # 配置java的环境变量
---> source /etc/profile # 重新加载配置文件
2)对安装好的jdk进行检测
---> Vim test.java # 在java中,类名要和文件名相同;且文件名后缀为.java
---> javac test.java # 生成.class文件
---> java test # 执行后的运行结果为hello xniu~
3)在server6和server1中安装tomcat
---> tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
---> cd /usr/local
---> ln -s apache-tomcat-7.0.37/ tomcat # 软连接
4)在tomcat的默认发布目录编写.jsp文件测试,查看apache是否安装成功(在此以server6作为实例演示,server1步骤与6相同)
---> vim test.jsp
The time is <%=new java.util.Date() %>
---> /usr/local/tomcat/bin/startup.sh # 启动tomcat服务
#在浏览器中,使用172.25.2.6:8080/test.html来进行查看
5)对server6的nginx服务进行配置。
---> vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost; # 通过apache服务访问tomcat
location ~ \.jsp$ {
proxy_pass http://127.25.2.6:8080;
}
6)在server6和server1中下载memcached服务,并启动服务。
---> yum install -y memcached # 在yum仓库中有,可直接下载
---> /etc/init.d/memcached start
---> netstat -antlp| grep 11211 # memcached服务默认端口为11211
7)在server6和server1中编辑tomcat的配置文件,添加如下信息
---> vim /usr/local/tomcat/conf/content.xml # 添加在最后
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n6:172.25.2.6:11211,n1:172.25.2.1:11211"
failoverNodes="n6" #在 node2 上此项设置为“n1”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
8) 修改server1和server6下的test.jsp页面。内容如下
---> vim /usr/local/tomcat/webapps/ROOT/test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
10) 将jar包放在server6和server1的/usr/local/tomcat/lib下。
11) 打开server6的tomcat,nginx;server1的tomcat(由于之前启动了memcache,在这就不启动了)
---> /usr/local/tomcat/bin/startup.sh
---> nginx
# 此时,我们可以在日志中查看memcache的节点信息
---> cat /usr/local/tomcat/logs/cataline.out
12) 此时,我们的配置大致完成了,可以在浏览器中输入172.25.2.6/test.jsp
# 安装telnet,查看memcache的存储记录
---> yum install -y telnet
---> telnet localhost 11211 # localhost为主机ip;11211为端口号(使用get id号来查看)
memcache+tomcat7.0.37+nginx实现session共享的更多相关文章
- .Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享
前言:虽说公司app后端使用的是.net core+Redis+docker+k8s部署的,但是微信公众号后端使用的是IIS部署的,虽说公众号并发量不大,但领导还是使用了负载均衡,所以在介绍docke ...
- net core+Redis+IIS+nginx实现Session共享
.Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享 前言:虽说公司app后端使用的是.net core+Redis+docker+ ...
- 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享
今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...
- memcache相同主域名下的session共享
本配置适合具有相同主域名的多台服务器进行session共享. 例如:www.lee.com , bbs.lee.com(多个子域名). 配置session保存在memcache: ini_set(&q ...
- 用Nginx实现Session共享的均衡负载
前言 大学三年多,也做个几个网站和APP后端,老是被人问到,如果用户多了服务器会不会挂,总是很尴尬的回答:“哈哈,我们的用户还少,到了服务器撑不住的时候,估计都上市了吧”.说是这么说,但是对于有强迫症 ...
- springboot+spring session+redis+nginx实现session共享和负载均衡
环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...
- SpringBoot2.x+Redis+nginx实现session共享和负载均衡
1.创建SpringBoot项目添加依赖 <dependency> <groupId>org.springframework.session</groupId> & ...
- Nginx 分布式session共享问题
在集群的时候每次访问,都会被代理转到不同的服务器,那么在这些服务器之间如何共享session? 解决方式1:session复制 只能在window下好使,web服务器解决(广播机制,将一台机器上的se ...
- nginx+tomcat+session共享(转)
1 起因 最近对新开发的web系统进行了压力测试,发现tomcat默认配置下压到600人的并发登录首页响应速度就有比较严重的影响,一轮出现2000多个的 500和502错误.我把登录的时间统计做了 ...
随机推荐
- mysql 删除表
删除表 DROP TABLE 表名;
- PAT 1075 PAT Judge[比较]
1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...
- java static成员变量方法和非static成员变量方法的区别
这里的普通方法和成员变量是指,非静态方法和非静态成员变量首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法. static成员变量有全局变量的作用 非static成员变量则 ...
- python selenium 安装与 chromedriver安装
安装 pip install selenium 安装完成之后运行脚本,如果没报错那ok.但是很不幸运,我报错啦.(本人使用ubuntu16.04,python2,or python3) 贴出我的报错: ...
- React 根据 state 修改className
className={ this.state.isLike ? 'active iconfont icon-xihuan' : 'iconfont icon-xihuan1' }
- 怎样在linux下对U盘进行格式化和分区
说明,为了不做无用功,首先必须卸载要分区的设备,分区才能执行成功.通过命令umount /media/?? 或者umount /mnt/??? 看你的实际情况,这一步必不可少.1.首先通过命令fdis ...
- 20145319 《网络渗透》MS12_020安全漏洞
20145319 <网络渗透>MS12_020安全漏洞 一 实验内容 初步掌握平台matesploit辅助模块aux的使用 辅助模块包括扫描等众多辅助功能 本次展示DOS攻击的实现 有了初 ...
- Ecplise项目转移到Android Studio,以及Genymotion模拟器介绍
一.移植android项目 今天简单分享一个从ecplise开发项目转移到Android Studio的方法,之前一直在ecplise上开发android项目,但是因为google现在主打Androi ...
- A8逻辑篇1.点亮一个LED(S5PV210.A8)
一.虚拟机安装好后,我们用Fedora 双击.vmx文件,将会在虚拟机中打开 相应的生成: 这些文件 二.进入虚拟机页面 等待启动 账号选择其他 用户名:root 密码:111111 设置页面大小: ...
- java bitmap/bitvector的分析和应用
转自: http://shmilyaw-hotmail-com.iteye.com/blog/1741608 简介 bitmap在很多海量数据处理的情况下会用到.一些典型的情况包括数据过滤, ...