热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx+tomcat+memcached服务器集群中共享session的设置方法

1、采用Nginx负载均衡2、memcached共享session3、tomcat集群配置(3台CentOS6)(172.18.188.64):操作系统CentOS6;安装nginx、memcached和tomcat6(172.18.188.76):操作系统CentOS6;安装tomcat6(172.18.188.78
1、采用Nginx负载均衡

2、memcached共享session

3、tomcat集群配置(3台CentOS 6)
(172.18.188.64): 操作系统CentOS 6; 安装nginx、memcached和tomcat 6
(172.18.188.76): 操作系统CentOS 6; 安装tomcat 6
(172.18.188.78): 操作系统CentOS 6; 安装tomcat 6

nginx、memcached、tomcat 6安装省略.

nginx配置如下:
nginx.conf如下:
#运行nginx所在的用户名和用户组
#user  root root;
#启动进程数
worker_processes 8;
#全局错误日志及PID文件
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
#工作模式及连接数上限
events
{
  use epoll;
  worker_connections 65535;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http
{
  #设定mime类型
  include       mime.types;
  default_type  application/octet-stream;
  include /usr/local/webserver/nginx/conf/proxy.conf;
  #charset  gb2312;
  #设定请求缓冲  
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  #client_max_body_size 8m;
  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 60;
  tcp_nodelay on;
#  fastcgi_connect_timeout 300;
#  fastcgi_send_timeout 300;
#  fastcgi_read_timeout 300;
#  fastcgi_buffer_size 64k;
#  fastcgi_buffers 4 64k;
#  fastcgi_busy_buffers_size 128k;
#  fastcgi_temp_file_write_size 128k;
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-Javascript text/css application/xml;
  gzip_vary on;
  #limit_zone  crawler  $binary_remote_addr  10m;
###禁止通过ip访问站点
#  server{
#       server_name _;
#       return 404;
#       }
upstream tserver {
    server 172.18.188.64:8080 weight=1;
    server 172.18.188.76:8080 weight=1;
    server 172.18.188.78:8080 weight=1;
}
  server
  {
    listen       80;
    server_name  vmwarehost;
    index index.html index.htm index.jsp;
    root  /home/www/web/ROOT;
    #limit_conn   crawler  20;  
    location /
    {
    proxy_pass http://tserver;
    } 
    location /NginxStatus
    {
      stub_status on;
      access_log off;
    }   
    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ico)$
    {
expires      30d;
    }
    location ~ .*\.(js|css)?$
    {
expires      1h;
    }  
#定义访问日志的写入格式
     log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log  /usr/local/webserver/nginx/logs/localhost.log access;
      }
}

proxy.confi配置如下
#!nginx (-)
# proxy.conf
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;

tomcat 6 server.xml配置如下:




 
 
 
 
 
 
 
 
 
 
 
   
    type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
 

 
 
   
   
   
    maxHttpHeaderSize="8192" cOnnectionTimeout="20000"
disableUploadTimeout="true" enableLookups="false"
redirectPort="8443" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75" acceptCount="100" />
   
              
   
   
   
        maxHttpHeaderSize="8192" cOnnectionTimeout="20000"
disableUploadTimeout="true" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" />
   
   
   
     
        
        channelSendOptiOns="6">


         
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
address="172.18.188.64"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>


        


         

          filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
          tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

       

     
     
     
      resourceName="UserDatabase"/>
     
      unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
       
       
       
       
     

   

 



content.xml配置如下

   
WEB-INF/web.xml
   
   
   
   
memcachedNodes="n1:172.18.188.64:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessiOnBackupAsync="false"
sessiOnBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectiOnsForSerialization="false"/>


memcached启动命令:
useradd -s /sbin/nologin memcached
memcached -d -m 2048 -l 172.18.188.64 -p 11211 -u memcached

ngingx启动命令
sbin/nginx

tomcat启动命令(startup.sh)
分别启动memcached nginx tomcat能实现session的简单共享.

按照上面配置Nginx Memcached Tomcat启动运行都没有问题,并且可以实现Session的共享.但是有2个问题
一、Session的共享是基于访问IP的,即在同一台电脑上开2个IE窗口时,获取到Session中内容是相同的,也就是sessionid除了最后面的jvmrout不一样,其他都一样,内容也一样,这样就造成如果2个用户先后在同一台电脑上登录形成session混乱,有没有可能配置成同一ip在不同的ie窗口中不共享session,一个ie窗口对应一个session,而不是一个ip共享一个session.后台的访问依然是由nginx根据weight做分发而不是固定到一台固定的tomcat机器?
二、Memcached 启动是用-m 512发现会有数据丢失而且丢失几率很大,在一个页面上连续不断的刷新时就会发现session中的内容会清空.

推荐阅读
author-avatar
历史本轻狂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有