• nginx与tomcat、memcached 集群Session共享


    一、 安装memcached
    centos:yum install memcached 即可
    二、实现
    我们采用Memcached管理Session,主要是memcached-session-manager开源tomcat插件改变
    Tomcat原始的Session存储机制,将session的存储放到分布式缓存Memcached中,从而实现对Session的共享。
    nginx与tomcat集群参考上一篇文章
    我的操作是在一台服务器上启动了2个tomcat,多台的做法类似
    2个tomcat分别用t1和t2表示
    tomcat版本:tomcat7
    1 配置tomcat7
    如果要在一台服务器启动2个tomcat服务,必须修改其中一个tomcat的端口及配置
    打开其中一个tomcat的conf/server.xml,修改

    <Server port="8006" shutdown="SHUTDOWN">,原来是8005
      <Connector port="8082" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"  URIEncoding="UTF-8"/>

    端口原来是8080
    2 分别启动2个tomcat服务,看能否正常启动,如果正常启动,继续
    3 创建一个jsp文件,叫test.jsp,内容:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    hello  apache-tomcat-8080 test.jsp
    
    sessionId:<%=session.getId()%>  
    <BR>
    sessionIp:<%=request.getServerName()%>  
    <BR>
    sessionPort:<%=request.getServerPort()%>   
    </body>
    </html>

    拷贝到t1(tomcat1)的ROOT/test.jsp目录
    再修改成

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    hello  apache-tomcat-8082 test.jsp
    
    sessionId:<%=session.getId()%>  
    <BR>
    sessionIp:<%=request.getServerName()%>  
    <BR>
    sessionPort:<%=request.getServerPort()%>   
    </body>
    </html>

    拷贝到t2(tomccat2)ROOT/test.jsp
    4 启动Memcached服务
    /usr/bin/memcached -d -m 5 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
    5 修改2个tomcat/conf/context.xml 文件

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" copyCollectionsForSerialization="false" requestUriIgnorePattern=".*.(png|gif|jpg|css|js)$"/>

    (注意我使用的是tomcat7,如果是tomcat6,transcoderFactoryClass的类名称是不同的)
    说明:
    1.requestUriIgnorePatter:过滤图片等静态文件去触发Session备份到Memcached。
    2.sessionBackupAsync:指定Session是否应该被异步保存到Memcached中。
    3.backupThreadCount :用来异步保存Session的线程数。
    4.sessionBackupTimeout :默认100毫秒,操作超过时间那么保存失败。
    6 添加jar文件到tomcat的lib目录下,jar的下载地址:
    http://download.csdn.net/detail/u013444177/8642805
    7 分别重启2个tomcat,查看tail -f ./logs/catalina.out,如果后台没有报错,即OK了
    8 访问http://www.xxxxx.cn/test.jsp,看页面的sessionId是否相同,
    因为我配置了nginx的负载均衡,刷新第一次时,访问的是端口8080的tomcat,再刷新的
    时候nginx反向代理到端口是8082的tomcat,就是说分别访问了2个tomcat下的test.jsp。
    查看页面的session Id 是否相同,如果相同,就说明OK了,(敲文字敲的手腕酸了!)

    参考文章 :http://blog.csdn.net/congcong68/article/details/41869203
    MSM介绍:http://gong1208.iteye.com/blog/1596120

    附带nginx.conf的配置:

    # For more information on configuration, see:
    #   * Official English Documentation: http://nginx.org/en/docs/
    #   * Official Russian Documentation: http://nginx.org/ru/docs/
    
    user              nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log;
    #error_log  /var/log/nginx/error.log  notice;
    #error_log  /var/log/nginx/error.log  info;
    
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
        upstream localhost_server {
        #ip_hash;
            server 1.1.1.1:8080 weight=10;
            server 1.1.1.1:8082 weight=10 down;
        }
        server {
            listen       80;
            server_name  www.****.cn;
            index index.html index.jsp;
            root /home/wwwftp/ROOT;
            #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
            location ~ .*.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ 
            { 
                      root /home/wwwftp/ROOT; 
              index index.html index.jsp;
                      #expires定义用户浏览器缓存的时间为1天,如果静态页面不常更新,可以设置更长这样可以节省带宽和缓解服务器的压力
                      expires      1d; 
                    } 
            #所有jsp、do的动态请求都交给后面的tomcat处理 
            location ~ (.jsp)|(.action)$ 
            { 
    
                  #tomcat地址
                  proxy_pass http://localhost_server;  
                  proxy_redirect off;  
                  proxy_set_header HOST $host;  
                  proxy_set_header X-Real-IP $remote_addr;  
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
                  client_max_body_size 10m;  
                  client_body_buffer_size 128k;  
                  proxy_connect_timeout 90;  
                  proxy_send_timeout 90;  
                  proxy_read_timeout 90;  
                  proxy_buffer_size 4k;  
                  proxy_buffers 4 32k;  
                  proxy_busy_buffers_size 64k;  
                  proxy_temp_file_write_size 64k;  
            }      
            #location / {  
            #        proxy_connect_timeout   3;  
            #        proxy_send_timeout      30;  
            #        proxy_read_timeout      30;  
            #            proxy_pass http://www.*****.cn;  
            #   }
        }
        # Load config files from the /etc/nginx/conf.d directory
        # The default server is in conf.d/default.conf
        include /etc/nginx/conf.d/*.conf;
    
    }
    

    配置memcached时一定注意安全漏洞:详细参考:memcache 未授权访问漏洞

  • 相关阅读:
    【数据中心】大二层网络
    数通ARP协议
    数通链路聚合技术
    【数据中心】VXLAN技术
    数通交换机的数据平面、控制平面、管理平面
    数通交换机环路问题
    数通VRRP协议
    数通以太网交换机工作原理
    数通堆叠技术
    查看机器位数
  • 原文地址:https://www.cnblogs.com/luleiitlife/p/8545074.html
Copyright © 2020-2023  润新知