• Tomcat8的kryo序列化方式session共享


    1.软件版本说明:

    1)asm-5.0.3.jar
    2)kryo-3.0.3.jar
    3)kryo-serializers-0.37.jar
    4)memcached-session-manager-1.9.5.jar
    5)memcached-session-manager-tc8-1.9.5.jar
    6)minlog-1.3.0.jar
    7)msm-kryo-serializer-1.9.5.jar
    8)objenesis-2.1.jar
    9)reflectasm-1.10.1.jar
    10)spymemcached-2.12.0.jar

    11)apache-tomcat-8.5.31

    2.tomcat程序文件修改

    vi $TOMCAT_HOME/conf/context.xml

    在<Context>和</Context>之间添加

      <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:{memcache/magent ip}:{port}"
        sticky="false"
        sessionBackupAsync="false"
        lockingMode="auto"
        requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"
        copyCollectionsForSerialization="true"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
        />
    3.序列化tomcat配置中有关Manager各参数说明:
    a)className
    这个是必选项。可配置为:
    de.javakaffee.web.msm.MemcachedBackupSessionManager
    或者
    de.javakaffee.web.msm.DummyMemcachedBackupSessionManager
    其中DummyMemcachedBackupSessionManager可用于测试环境,不需要真实存在memcached
      
    b)memcachedNodes
    这个是必选项。memcached的节点信息(多个节点使用空格或逗号分开),格式如:
    memcachedNodes="n1:app01:11211,n2:app02:11211"。
      
    c)failoverNodes
    这个是可选项,不能使用在non-sticky sessions模式。
    故障转移配置节点,多个使用空格或逗号分开,配置某个节点为备份节点,当其他节点都不可用时才会存储到备份节点,官方建议配置为和tomcat同服务器的节点。
      
    理由如下:
    假如有两台服务器m1,m2,其中m1部署tomcat和memcached节点n1,m2部署memcached节点n2。
    如果配置tomcat的failoverNodes值为n2或者不配置,则当服务器m1挂掉后n1和tomcat中保存的session会丢失,而n2中未保存或者只保存了部分session,这就造成
    部分用户状态丢失;
    如果配置tomcat的failoverNodes值为n1,则当m1挂掉后因为n2中保存了所有的session,所以重启tomcat的时候用户状态不会丢失。
    为什么n2中保存了所有的session? 因为failoverNodes配置的值是n1,只有当n2节点不可用时才会把session存储到n1,所以这个时候n1中是没有保存任何session的。
     
    d)lockingMode
    这个是可选项,默认none,只对non-sticky有效。
    当配置成node时,表示从来不加锁
    当配置成all时,表示当请求时对Session锁定,直到请求结束
    当配置成auto时,表示对只读的request不加锁,对非只读的request加锁
     
    e)requestUriIgnorePattern
    这个是可选项,制定忽略那些请求的session操作,一般制定静态资源如css,js一类的。
     
    f)sessionBackupAsync
    这个是可选项,默认true,是否异步的方式存储到memcached。
     
    j)sessionBackupTimeout
    这个是可选项,默认100毫秒,异步存储session的超时时间。即web工程对session的修改更新到memcache上的时间。
     
    h)copyCollectionsForSerialization
    这个是可选项,默认false。
     
    i)transcoderFactoryClass
    这个是可选项,默认值de.javakaffee.web.msm.JavaSerializationTranscoderFactory,制定序列化和反序列化数据到memcached的工厂类。
     
    j)operationTimeout
    这个是可选项,默认1000毫秒,memcached的操作超时时间。
     
    k)backupThreadCount
    这个是可选项,默认是cpu核心数,异步存储session的线程数。
     
    l)storageKeyPrefix
    这个是可选项,默认值webappVersion,存储到memcached的前缀,主要是为了区分多个webapp共享session的情况。可选值:静态字符串、host、context、webappVersion,多个使用逗号分割。 、
     
    m)sessionAttributeFilter

    这个是可选项,通过正则表达式确定那些session中的属性应该被存储到memcached。例子如:sessionAttributeFilter="^(userName|sessionHistory)$"。

    4.stick和non-stick的工作流程:
    Sticky 模式:
    tomcat session为主session,memcached为备session。Request请求到来时,从memcached加载备session到tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
     
    Non-Sticky模式:
    tomcat session为中转session,memcached1为主session,memcached2为备session。Request请求到来时,从memcached 2加载备session到tomcat,(当容器中还是没有session则从memcached1加载主session到tomcat, 这种情况是只有一个memcached节点,或者有memcached1出错时), Request请求结束时,将tomcat session更新至主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的。 多台tomcat集群时 需要选择Non-Sticky模式,即sticky="false"

    一入运维深似海,从此不见彼岸花
  • 相关阅读:
    ELK原理以及一些处理难点分析
    mysql无法启动,Error: page 13476 log sequence number
    Linux lsattr命令
    mysql主从复制案例及小结
    Nagios
    iptables路由转发及控制
    DNS域名解析
    无法启动Print Spooler服务,错误代码1068,依赖服务或组件
    云计算虚拟化知识
    文件上传漏洞
  • 原文地址:https://www.cnblogs.com/cn-jasonho/p/13285604.html
Copyright © 2020-2023  润新知