zoukankan      html  css  js  c++  java
  • Nginx+Tomcat+memcached负载均衡实现session共享

    http://blog.csdn.net/love_ubuntu/article/details/8464983

    1.  安装各个软件不用说了。

    2.  到tomcat的安装目录lib中,加入:

    memcached-2.6.jarhttp://spymemcached.googlecode.com/files/memcached-2.6.jar

    javolution-5.4.3.1.jar

    memcached-session-manager-1.5.1.jar

    memcached-session-manager-tc7-1.5.1.jar

    msm-javolution-serializer-1.5.1.jar

    msm-kryo-serializer-1.5.1.jar

    msm-xstream-serializer-1.5.1.jar

    3. 配置tomcat. 在%TOMCAT_HOME%configcontext.xml文件中加入】

    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.      />  

    4.  测试发现,有人说:也可在server.xml配置文件的<Host>...<Host>中添加配置

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

    我发现测试没通过。


    5. nginx的配置

    [java] view plaincopy
    1. #user  nobody;  
    2. worker_processes  1;  
    3.   
    4. #error_log  logs/error.log;  
    5. #error_log  logs/error.log  notice;  
    6. #error_log  logs/error.log  info;  
    7.   
    8. #pid        logs/nginx.pid;  
    9.   
    10.   
    11. events {  
    12.     worker_connections  10240;  
    13. }  
    14.   
    15.   
    16. http {  
    17.     include       mime.types;  
    18.     default_type  application/octet-stream;  
    19.   
    20.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
    21.     #                  '$status $body_bytes_sent "$http_referer" '  
    22.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
    23.   
    24.     #access_log  logs/access.log  main;  
    25.   
    26.     sendfile        on;  
    27.     #tcp_nopush     on;  
    28.     #keepalive_timeout  0;  
    29.   
    30.     tcp_nopush     on;  
    31.     keepalive_timeout 60;  
    32.   
    33.     tcp_nodelay on;  
    34.   
    35.      client_body_buffer_size  512k;  
    36.      proxy_connect_timeout    5;  
    37.      proxy_read_timeout       60;  
    38.      proxy_send_timeout       5;  
    39.      proxy_buffer_size        16k;  
    40.      proxy_buffers            4 64k;  
    41.      proxy_busy_buffers_size 128k;  
    42.      proxy_temp_file_write_size 128k;  
    43.   
    44.     #gzip  on;  
    45.     gzip on;  
    46.     gzip_min_length  1k;  
    47.     gzip_buffers     4 16k;  
    48.     gzip_http_version 1.1;  
    49.     gzip_comp_level 2;  
    50.     gzip_types       text/plain application/x-javascript text/css application/xml;  
    51.     gzip_vary on;  
    52.   
    53.     upstream   localhost{  
    54.          #weigth参数表示权值,权值越高被分配到的几率越大  
    55.          server 127.0.0.1:9001 weight=1  max_fails=2 fail_timeout=30s;  
    56.          server 127.0.0.1:9004 weight=1  max_fails=2 fail_timeout=30s;  
    57.      server 127.0.0.1:9007 weight=1  max_fails=2 fail_timeout=30s;   
    58.      #ip_hash;  
    59.     }  
    60.     server {  
    61.         listen       80;  
    62.         server_name  localhost;  
    63.         charset utf-8;  
    64.   
    65.         #access_log  logs/host.access.log  main;  
    66.   
    67.         location / {  
    68.             root   html;  
    69.             index  index.html index.htm;  
    70.         proxy_pass    http://localhost;  
    71.         }  
    72.   
    73.         location ~ ^/(WEB-INF)/ {   
    74.         deny all;   
    75.         }   
    76.   
    77.         #error_page  404              /404.html;  
    78.   
    79.         # redirect server error pages to the static page /50x.html  
    80.         #  
    81.         error_page   500 502 503 504  /50x.html;  
    82.   
    83.         location = /50x.html {  
    84.             root   html;  
    85.         }  
    86.   
    87.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
    88.         #  
    89.         #location ~ .php$ {  
    90.         #    proxy_pass   http://127.0.0.1;  
    91.         #}  
    92.   
    93.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
    94.         #  
    95.         #location ~ .php$ {  
    96.         #    root           html;  
    97.         #    fastcgi_pass   127.0.0.1:9000;  
    98.         #    fastcgi_index  index.php;  
    99.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
    100.         #    include        fastcgi_params;  
    101.         #}  
    102.   
    103.         # deny access to .htaccess files, if Apache's document root  
    104.         # concurs with nginx's one  
    105.         #  
    106.         #location ~ /.ht {  
    107.         #    deny  all;  
    108.         #}  
    109.     }  
    110.   
    111.   
    112.     # another virtual host using mix of IP-, name-, and port-based configuration  
    113.     #  
    114.     #server {  
    115.     #    listen       8000;  
    116.     #    listen       somename:8080;  
    117.     #    server_name  somename  alias  another.alias;  
    118.   
    119.     #    location / {  
    120.     #        root   html;  
    121.     #        index  index.html index.htm;  
    122.     #    }  
    123.     #}  
    124.   
    125.   
    126.     # HTTPS server  
    127.     #  
    128.     #server {  
    129.     #    listen       443;  
    130.     #    server_name  localhost;  
    131.   
    132.     #    ssl                  on;  
    133.     #    ssl_certificate      cert.pem;  
    134.     #    ssl_certificate_key  cert.key;  
    135.   
    136.     #    ssl_session_timeout  5m;  
    137.   
    138.     #    ssl_protocols  SSLv2 SSLv3 TLSv1;  
    139.     #    ssl_ciphers  HIGH:!aNULL:!MD5;  
    140.     #    ssl_prefer_server_ciphers   on;  
    141.   
    142.     #    location / {  
    143.     #        root   html;  
    144.     #        index  index.html index.htm;  
    145.     #    }  
    146.     #}  
    147.   
    148. }  


    6.  

       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。


    7.  编辑session.jsp 进行测试是否session共享。

    [html] view plaincopy
    1. <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    7. <html>  
    8.   <head>  
    9.     <base href="<%=basePath%>">    
    10.     <title>My JSP 'session.jsp' starting page</title>  
    11.     <meta http-equiv="pragma" content="no-cache">  
    12.     <meta http-equiv="cache-control" content="no-cache">  
    13.     <meta http-equiv="expires" content="0">      
    14.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    15.     <meta http-equiv="description" content="This is my page">  
    16.     <!-- 
    17.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    18.     -->  
    19.   </head>  
    20.   <body>  
    21.     <%  
    22.      System.out.println(session.getId());  
    23.      out.println("<br> This is (TOMCAT1|TOMCAT2), SESSION ID:" + session.getId()+"<br>");  
    24.     %>  
    25.   </body>  
    26. </html>  
    要打印出n1,tomcat等字样才表示session共享成功。

    8. 注意的问题。memcached最好安装成windows服务。tomcat的端口不要冲突。nginx启动最好用命令。

  • 相关阅读:
    看书笔记《python基础》__1
    MQTT
    杂记
    类型转化
    soc
    时钟同步
    设置地址
    清理日志
    pandas_matplot_seaborn
    Qt_Quick开发实战精解_4
  • 原文地址:https://www.cnblogs.com/bluejoe/p/5116019.html
Copyright © 2011-2022 走看看