一、环境

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请求结束时,将tomcat session更新至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

  1. <Engine name="Catalina"defaultHost="localhost"jvmRoute="tomcat2">

注意每台tomcat的jvmroute参数都不能一样

返回sessionid :011F1CAEAF5AE925F4124D94785AFE41-n1 .tomcat2

n1 表示memcached ; .tomcat2表示配置jvmRoute。

MSM搭建(Memcached_Session_Manager)--解决集群session共享相关推荐

  1. Redis解决老项目集群Session共享案例与回顾

    老项目突然之间客户要用了而且用户量还不少,后端移动端都需要给升级.第一改进的时候做了移动端与后端的服务分流,这次升级为分布式集群模式.分布式集群模式需要解决Session共享问题和数据一致性分布式锁处 ...

  2. Nginx+memcached+tomcat配置集群session共享负载均衡

    Nginx+memcached+tomcat配置集群session共享负载均衡 配置环境: windows xp下 jdk1.7.0_10      nginx-1.2.6  (附下载)      m ...

  3. Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

    一,环境说明 操作系统是Windows7家庭版(有点不专业哦,呵呵!),JDK是1.6的版本, Tomcat是apache-tomcat-6.0.35-windows-x86,下载链接:http:// ...

  4. mysql集群session_PHP集群session共享

    集群的概念没有多复杂,其实就是多台电脑为了同一个目标在一起工作.在Web应用中,就是多个服务器提供一个站点的服务. 搭建PHP集群的第一步就是设置负载均衡.首先我们需要三台主机: Nginx负载:19 ...

  5. php 集群 session共享,Session共享:php和redis集群如何实现Session共享

    本篇文章给大家带来的内容是关于Session共享:php和redis集群如何实现Session共享,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.redis 数据库集群安装软件版 ...

  6. tomcat集群session共享

    在部署cas系统的时候,遇到个问题,在tomcat集群部署cas系统,不能在一边服务器实现了登陆而在另一侧服务器还是没登录的.所以要实现tomcat集群的session的共享,从而实现高可用. 了解到 ...

  7. spring-session + redis 实现集群 session 共享

    2019独角兽企业重金招聘Python工程师标准>>> 目前市面上实现session共享的方案有很多,其中比较常用的是使用Tomcat.Jetty等web服务器提供的session共 ...

  8. Jetty9.2.2集群Session共享

    为什么80%的码农都做不了架构师?>>>    针对Jetty就不过多的介绍了,自行研究去吧! 1.准备环境 MySQL数据库:下载地址:自行百度. jetty-distributi ...

  9. mysql集群session_Jetty9.2.2集群Session共享

    针对Jetty就不过多的介绍了,自行研究去吧! 1.准备环境 MySQL数据库:下载地址:自行百度. jetty-distribution-9.2.2:下载地址:http://download.ecl ...

最新文章

  1. java 小波去噪原理_小波去噪的基本知识
  2. hi3519av100 2.0版本sdk编译提示 cannot find uuid library required for mkfs.ubifs
  3. vscode安装和使用
  4. matlab 与dsp联合仿真,matlab和DSP联合开发前景很大?
  5. swingworker_使用SwingWorker的Java Swing中的多线程
  6. HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法
  7. 从地理围栏看物联网安防
  8. 第十五天 图【下】(大结局)
  9. 27 学java_自学Java第27天
  10. CSDN总部落户长沙,共建中国开发者产业中心城市!
  11. SCOM 2012知识分享-17:创建并管理组
  12. php 查询条件 session,PHP获取不到SESSION信息之一般情况解决方案
  13. 主板检测卡c5_用诊断卡 搞定主板故障
  14. 一图秒懂!“天使投资、VC、PE、A轮、B轮、C轮融资”的关系
  15. 云锁安装Linux服务器云锁安装说明
  16. python 群发邮件数量限制_用邮件群发平台群发邮件的数量有限制吗?一般可以发多少?...
  17. 打工就是 “演戏”,你可以认真,但别太当真
  18. 梧桐树定制福满满养老年金,给你养老生活源源不断的现金流!
  19. Encoder-Decoder 框架
  20. 网络字节序与主机字节序的相互转换

热门文章

  1. Lodop设置指定打印机打印,避免默认打印机被修改
  2. (原创)android6.0系统 PowerManager深入分析(很具体)
  3. Python实现对Bitly的USA.gov数据集的可视化
  4. 浏览器实现pdf下载、ms http下载、IE不兼容
  5. 谷歌表格_您应该知道的5种Google表格功能
  6. PS教程:5种把图片变成黑白色的方法
  7. linux 终端窗口最大化,如何设置终端打开最大化
  8. mencoder MPlayer 参数详细
  9. 导热系数常见测量方法
  10. VS2019c++配置GDAL和HDF库新手入门