tomcat session 共享
1. nginx+tomcat7+memcached
安装JDK7
sudo apt-get install java7-jdk
安装tomcat7
Tomcat7下载地址
http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.34/bin/
找到apache-tomcat-7.0.34.tar.gz
解压 sudo tar xvzf apache-tomcat-7.0.34.tar.gz
移动tomcat sudo mv apache-tomcat-7.0.34 /data/game-web/
启动tomcat
/data/game-web/apache-tomcat-7.0.34/bin/startup.sh
查看是否正常启动,tomcat 端口默认为 8080
关闭tomcat
/data/game-web/apache-tomcat-7.0.34/bin/ shutdown.sh
Tomcat7必须增加java包,下载地址:
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-tc7-1.6.1.jar
http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.6.1.jar
http://spymemcached.googlecode.com/files/spymemcached-2.8.0.jar
下载好后复制到/data/game-web/apache-tomcat-7.0.34/lib 目录下
修改/data/game-web/apache-tomcat-7.0.34/ server.xml 文件找到Engine标签修改如下内容
<Engine name="Catalina" defaultHost="localhost">
修改
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
每一个 t omcat 的jvmRoute名都不同
修改/data/game-web/apache-tomcat-7.0.34/context.xml 文件找到Context 标签增加如下内容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="node1:localhost:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sticky="false"
sessionBackupAsync="false" />
或者修改/data/game-web/apache-tomcat-7.0.34/server.xml 文件在Host标签增加如下内容
<Context path="" docBase="/web/url" reloadable="true" crossContext="true" >
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="node1:192.168.130.101:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sticky="false"
sessionBackupAsync="false"
/>
</ Context>
Manager标签属性说明:
className此属性是必须的。
memcachedNodes此属性是必须的。这个属性必须包含你所有运行的memcached节点。每个节点的定义格式为<id>:<host>:<port>。多个之间用空格或半角逗号隔开(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。如果你设置单个memcache节点<id>是可选的,所以它允许设置为<host>:<port>(memcachedNodes="localhost:11211")。
failoverNodes可选项,属性只能用在非粘连Session机制中。此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开
memcachedProtocol可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。
sticky 可选项,默认为true。
指定使用粘性的还是非粘性的Session机制。
lockingMode 可选项, 此属性只对非粘性Session有用,默认为none。
指定非粘性Session的锁定策略。他的只有
(1)、none:从来不加锁
(2)、all: 当请求时对Session锁定,直到请求结束
(3)、auto:对只读的request不加锁,对非只读的request加锁
(4)、uriPattern:<regexp>: 使用正则表达式来比较requestRUI + "?" + queryString来决定是否加锁,
requestUriIgnorePattern 可选项
此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。
sessionBackupAsync 可选项,默认true
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
backupThreadCount 可选项,默认为CPU内核数。用来异步保存Session的线程数(如果sessionBackupAsync="true")。
sessionBackupTimeout 可选项,默认100,单位毫秒
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒
sessionAttributeFilter 可选项 从1.5.0版本有此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如
sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"属性保存到Memcached中。依赖于选择的序列化策略。
transcoderFactoryClass 可选,默认为
de.javakaffee.web.msm.JavaSerializationTranscoderFactory 此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.
copyCollectionsForSerialization 可选项,默认false。
customConverter 可选项
enableStatistics 可选项,默认true用来指定是否进行统计。
enabled 可选项,默认true指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。
安装nginx
sudo apt-get install nginx
修改 nginx.conf 文件
找到http {},在http{}增加以下内容
upstream monitor.zqgame.com {
ip_hash; #同一个客户IP的请求分配给同一个后台服务器
server 192.168.120.17:80 ;#应用 1
server 192.168.120.16:80 ;#应用2
}
# monitor.zqgame.com 为拦截的域名
server {
server_name monitor.zqgame.com;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://monitor.zqgame.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /log/nginx/monitor.zqgame.com_access.log access;
}
测试:
结果就是,seesion ID会随着每次用户的提交而变换节点,但ID不变。
例如:
JSESSIONID=CFC1ACAC6B0B8C27BEA76919F3A99BF8-node1.jvm1
CFC1ACAC6B0B8C27BEA76919F3A99BF8为session会话id
node1为memcache 的id
jvm1为 jvmRoute 的值
后台打印日志
/data/game-web/apache-tomcat-7.0.34/conf/logging.properties 文件中添加de.javakaffee.web.msm.level=FINE , 就可以在
catalina.out 的日志中看到详细的session 存取情况
tomcat session 共享的更多相关文章
- Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享
Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...
- Session会话保持机制的原理与Tomcat Session共享的几种实现方式(Session Cluster、memcached+MSM)
一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除. ...
- 负载均衡下 tomcat session 共享
概述 在分布式部署的情况下,每台tomcat 都会有自己的session ,这样如果 用户A 在tomcat1 下登录,在tomcat2 下并没有session信息.如果 tomcat1宕机,tomc ...
- nginx+tomcat+session共享(转)
1 起因 最近对新开发的web系统进行了压力测试,发现tomcat默认配置下压到600人的并发登录首页响应速度就有比较严重的影响,一轮出现2000多个的 500和502错误.我把登录的时间统计做了 ...
- 【nginx】nginx tomcat session 共享配置
tomcat,redis下载忽略. 一.从github上下载源码,https://github.com/jcoleman/tomcat-redis-session-manager, 将源码复制到开发工 ...
- tomcat session共享
1.版本 redis3.2 nginx tomcat8.5 2.下载jar包 tomcat-cluster-redis-session-manager 解压后大家可以看看 readMe.tx ...
- 浅谈负载均衡之【tomcat分布式session共享】
1)整理集成所需jar kryo-1.0.3.jar kryo-serializers-0.8.jar memcached-2.4.2.jar memcached-session-manager-1. ...
- Tomcat利用MSM实现Session共享方案解说
Session共享有多种解决方法,常用的有四种:1)客户端Cookie保存2)服务器间Session同步3)使用集群管理Session(如MSM) 4)把Session持久化到数据库 针对上面Sess ...
- Tomcat通过Memcached实现session共享的完整部署记录
对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...
随机推荐
- python工程遇到的错误
1.SyntaxError: Non-ASCII character '\xe5' in file D:\eclipseworkspace\test\test_urllib2.py on line2 ...
- 利用Python测量滴水湖的水面面积
美丽的滴水湖 美丽的滴水湖坐落在上海的东南角,濒临东海,风景秀丽,安静舒适,是旅游.恋爱的绝佳去处.笔者有幸去过一回,对那儿的风土人情留下了深刻的印象,如果有机会,笔者还会多去几次! 滴水湖是 ...
- 第一册:lesson fifty one.
原文: A pleasant climate. A:Where do you come frome? B:I come from Greece. A:What's the climate like i ...
- 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市
今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光 ...
- 45.work_struct和delayed_work的工作队列使用
介绍 在中断处理中,经常用到工作队列,这样便能缩短中断处理时的时间 中断中通过调用schedule_work(work)来通知内核线程,然后中断结束后,再去继续执行work对应的func函数 示例 当 ...
- Retrofit2 原理解析
Retrofit是什么 官网介绍是A type-safe HTTP client for Android and Java,是一个 RESTful 的 HTTP 网络请求框架的封装,但网络请求不是Re ...
- angular select2 下拉单选和多选的取值赋值
官网:http://select2.github.io/examples.html 兼容性: 引入文件 /select2.min.js /select2.min.css html <select ...
- 自定义简单版本python线程池
python未提供线程池模块,在python3上用threading和queue模块自定义简单线程池,代码如下: #用threading queue 做线程池 import queue import ...
- elementUI vue upload完整示例
elementUI 和vue 还有axios +java的完整示例, 代码敲了很久, 累死了, 以后用就直接复制了 ,很值吧!!! 1.html <!DOCTYPE html> <h ...
- JNI C反射调用java方法
前面记录了调用C的学习笔记,现在来记录一下C反射调用Java的笔记.JNI开发学习之调用C方法 Android开发中调用一个类中没有公开的方法,可以进行反射调用,而JNI开发中C调用java的方法也是 ...