MSM搭建(Memcached_Session_Manager)--解决集群session共享
2016-05-11 13:24
676 查看
一、环境
tomcat7三台,nginx(负载均衡),memcached(1.4.0)需要的jar
二、memcached搭建
需要安装libevent三、tomcat配置
在tomcate的conf文件下的content.xml添加(非粘性):<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:12301"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
copyCollectionsForSerialization="false"
/>
四、nginx配置
user nobody;worker_processes 4;
events{
worker_connections 512;
}
http{
upstream msm{
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server{
listen 8080;
location /{
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
#禁用缓存
proxy_buffering off;
#反向代理的地址
proxy_pass http://msm;
}
}
}
五、说明
MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcatsession更新至memcached,以达到session共享之目的, 支持 sticky 和 non-sticky 模式。
黏性(sticky)session:
非黏性( non-sticky)session:
Sticky 模式: tomcat session 为 主session, memcached 为备 session。Request请求到来时, 从memcached加载备 session到 tomcat (仅当tomcat
jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
Non-Sticky模式:tomcat session 为 中转session, memcached1 为主 sessionmemcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat
session更新至主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的。
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。
配置$CATALINA_HOME/conf/server.xml
<Engine name="Catalina"defaultHost="localhost"jvmRoute="tomcat2">
注意每台tomcat的jvmroute参数都不能一样
返回sessionid :011F1CAEAF5AE925F4124D94785AFE41-n1 .tomcat2
n1 表示memcached ; .tomcat2表示配置jvmRoute。
相关文章推荐
- Nginx负载均衡+tomcat+session共享
- Memcached Session Manager(MSM)
- Nginx+Tomcat负载平衡,Redis管理session存储
- Redis将Session 集中管理
- Tomcat集群Session管理之Memcached(MSM)
- Apache&Tomcat&Redis&Nginx配置集锦
- Java web集群session共享方案
- 使用apache+tomcat 负载均衡 session共享
- Redis实现分布式session功能的共享
- memcached-session-manager 实现 tomcat session共享
- 为什么不能用memcached存储Session?
- 用Redis存储Tomcat集群的Session实现session共享
- Apache+Tomcat负载均衡两种session共享方式的设置
- weblogic 的共享session_mysql实现
- 解决nginx负载均衡的session共享问题
- tomcat多域名共享cookie,共享session以及修改sessionCookieName的解决方案
- nginx+tomcat集群及使用memcache支持session共享 配置说明
- Nginx负载均衡+tomcat+session共享
- Tomcat配置Session复制
- ansible安装tomcat_msm