• 【转】MSM搭建(Memcached_Session_Manager)--解决集群session共享


    一、环境

        tomcat7三台,nginx(负载均衡),memcached(1.4.0)
    需要的jar

    二、memcached搭建
        需要安装libevent

    三、tomcat配置
    在tomcate的conf文件下的content.xml添加(非粘性):
     
     
     
     
     
     
     
     
                    />

    四、nginx配置
    user nobody;
    worker_processes 4;
        worker_connections 512;
        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;
                             #反向代理的地址
    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 。以达到主备同步之目的。


    此属性是必须的。

    此属性是必须的。这个属性必须包含你所有运行的memcached节点。每个节 点的定义格式为<id>:<host>:<port>。 多个之间用空格或半角逗号隔开(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。如果你设置单个memcache节点<id>是可选的,所以它允许设置为<host>:<port>(memcachedNodes="localhost:11211")。

    可选项,属性只能用在非粘连Session机制中。

     此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开

    可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。

    指定使用粘性的还是非粘性的Session机制。

     此属性只对非粘性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 可选项

    用来指定是否进行统计。

     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。

  • 相关阅读:
    Codeforces 787D. Legacy 线段树优化建图+最短路
    Codeforces 1051E. Vasya and Big Integers
    BZOJ3261 最大异或和
    BZOJ3531 SDOI2014 旅行
    洛谷P2468 SDOI 2010 粟粟的书架
    2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
    HDU6280 From Tree to Graph
    HDU5985 Lucky Coins 概率dp
    (HDU)1334 -- Perfect Cubes (完美立方)
    (HDU)1330 -- Deck (覆盖物)
  • 原文地址:https://www.cnblogs.com/dsc65749924/p/6054655.html
Copyright © 2020-2023  润新知