• Nginx和Tomcat负载均衡实现session共享(转)


        以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架。

        此框架的优势:

             1、支持Tomcat6和Tomcat7

              2、操作粘性或不黏性Session

              3、没有单点故障

              4、Tomcat的故障转移

              5、Memcached的故障转移

              6、可插拔的Session序列化

              7、支持异步保存Session

              8、Sessions发送到Memcached如果他确实修改了

              9、JMX管理和监控

        步骤:

                以下操作步骤的前提是你已经安装了,Tomcat和Memcached,和已经配置了Nginx的负载,

               如果这些您都没做,请先安装和配置,这些网上有很多,不再多说。

           1、下载jar包

                     下载的jar有:

                         memcached-session-manager-1.5.1.jar, memcached-session-manager-tc6-1.5.1.jar, 

                    jar包下载地址:http://code.google.com/p/memcached-session-manager/downloads/list

           2、把下载的jar包放到%TOMCAT_HOMT%lib中。

           3、配置%TOMCAT_HOME%configcontext.xml

                    在Context.xml文件中加入

                   

    [html] view plain copy
     
    1.             <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    2. memcachedNodes="n1:localhost:11211,n2:localhost:11212"            
    3. requestUriIgnorePattern=".*.(png|gif|jpg|css|js){1}quot;  
    4. sessionBackupAsync="false"  
    5. sessionBackupTimeout="1800000"  
    6. copyCollectionsForSerialization="false"  
    7. transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  
    8.            
    9.      />  

                   也可在server.xml配置文件的<Host>...<Host>中添加配置

         

    [html] view plain copy
     
    1.                 
    2. <Context docBase="F:/tomcats/tomcat-7.0.2_2/webapps"  path= "/msm"  reloadable= "true"  >  
    3.       <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    4. memcachedNodes="n1:localhost:11211,n2:localhost:11212"            
    5. requestUriIgnorePattern=".*.(png|gif|jpg|css|js){1}quot;  
    6. sessionBackupAsync="false"  
    7. sessionBackupTimeout="1800000"  
    8. copyCollectionsForSerialization="false"  
    9. transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  
    10.            
    11. />  
    12. </Context>  

             4、启动Tomcat查看Session是否共享成功。

         说明:

                1、 session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。

           2、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。

               更多说明请看:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

     
     http://blog.csdn.net/small_love/article/details/6662686
  • 相关阅读:
    SQL Server 跨服务器 存储过程传字符串数组不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server跨服务器查询
    抓包自定义过滤器需加%XXXX%,如%third_play%
    svn 清理命令失败
    通过windug判断某个模块导致程序不能退出。
    如果判断不出是不是某个模块出的问题,删除此模块测试。
    读配置前把vector清掉
    DNS服务器的原理
  • 原文地址:https://www.cnblogs.com/softidea/p/5535383.html
Copyright © 2020-2023  润新知