zoukankan      html  css  js  c++  java
  • 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 存取情况

  • 相关阅读:
    Laravel Providers——服务提供者的注册与启动源码解析
    基于visual Studio2013解决算法导论之054图的邻接矩阵表示
    基于visual Studio2013解决算法导论之053图的邻接表表示
    基于visual Studio2013解决算法导论之052深度优先
    基于visual Studio2013解决算法导论之051区间树
    基于visual Studio2013解决算法导论之050强连通分支
    基于visual Studio2013解决算法导论之049活动选择问题
    基于visual Studio2013解决算法导论之048红黑树
    基于visual Studio2013解决算法导论之047赫夫曼编码
    基于visual Studio2013解决算法导论之046广度优先搜索
  • 原文地址:https://www.cnblogs.com/shiyuelp/p/7063769.html
Copyright © 2011-2022 走看看