Nginx+Tomcat+Memcached集群Session共享

提供给大家整合实例:

http://download.csdn.net/detail/zld1987/9577962

cookie是怎样工作的?

例如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是“Michael Jordan”,同时还对所创建的Cookie的属性如path、domain、expires等进行了指定。

Set-Cookie:login=Michael Jordan;path=/;domain=msn.com;

expires=Monday,01-Mar-99 00:00:01 GMT

上面这个Header会自动在浏览器端计算机的Cookie文件中添加一条记录。浏览器将变量名为“login”的Cookie赋值为“Michael Jordon”。注意,在实际传递过程中这个Cookie的值是经过了URLEncode方法的URL编码操作的。

这个含有Cookie值的HTTP Header被保存到浏览器的Cookie文件后,Header就通知浏览器将Cookie通过请求以忽略路径的方式返回到服务器,完成浏览器的认证操作。

此外,我们使用了Cookie的一些属性来限定该Cookie的使用。例如Domain属性能够在浏览器端对Cookie发送进行限定,具体到上面的例子,该Cookie只能传到指定的服务器上,而决不会跑到其他的如www.hp.com的Web站点上去。Expires属性则指定了该Cookie保存的时间期限,例如上面的Cookie在浏览器上只保存到1999年3月1日1秒。当然,如果浏览器上Cookie太多,超过了系统所允许的范围,浏览器将自动对它进行删除。至于属性Path,用来指定Cookie将被发送到服务器的哪一个目录路径下。

说明:浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。

session又是如何工作的?

由于http是无状态的协议,你访问了页面A,然后在访问B,http无法确定这2个访问来自一个人,因此要用cookie或session来跟踪用户,根据授权和用户身份来显示不同的页面。比如用户A登陆了,那么能看到自己的个人信息,而B没登陆,无法看到个人信息。还有A可能在购物,把商品放入购物车,此时B也有这个过程,你无法确定A,B的身份和购物信息,所以需要一个session ID来维持这个过程。

cookie是服务器发给客户端,并且保持在客户端的一个文件,里面包含了用户的访问信息(账户密码等),可以手动删除或设置有效期,在下次访问的时候,会返给服务器。注意:cookie可以被禁用,所以要想其他办法,这就是session。比如:你去商场购物,商场会给你办一张会员卡,下次你来出示该卡,会有打折优惠。该卡可以自己保存(cookie),或是商场代为保管,由于会员太多,个人需要保存卡号信息(session ID)。

为什么要持久化SESSION?

在客户端每个用户的Session对象存在Servlet容器中,如果Tomcat服务器重起/当机的话该session就会丢失,而客户端的操作应为session的丢失而造成数据丢失,而且当前用户访问量巨大,每个用户的Session里存放大量的数据的话,那么就很占用服务器大量的内存,从而是服务器的性能受到影响。

有关集群几种session同步方案请参考 http://blog.csdn.net/shimiso/article/details/8978922

有关Nginx 介绍和使用请参考 http://blog.csdn.net/shimiso/article/details/8690897

Nginx+Tomcat+Memcached实现tomcat集群和session共享

一、Nginx部分

1.1、Nginx介绍

  Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

  Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。

  据说他当初是F5的成员之一,英文主页:http://nginx.net 。

1.2、Nginx优点

  Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性:

  在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue作为开发模型.

  Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

  作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.

  Nginx 是一个 安装非常的简单 , 配置文件 非常简洁(还能够支持perl语法), Bugs非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级.

1.3、Nginx安装

  到官网http://nginx.org/en/download.html下载最新的稳定版本,目前是1.8.1。

下面验证Nginx是否正常启动,浏览器中输入nginx服务器地址,出现如下图说明nginx正常工作。

二、利用memcached配置Nginx、Tomcat实现负载均衡和session共享

Tomcat、memcached安装这里就不讲了,主要介绍如何配置Nginx实现Tomcat的负载均衡和利用memcached实现session共享。

配置Nginx+Tomcat集群实现负载均衡

这里主要修改nginx的配置文件nginx.conf

#user  nobody;
worker_processes  4;
error_log  logs/error.log;
events {
    worker_connections  1024;
}  

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    upstream  www.zld.com   {
              server   127.0.0.1:8080 weight=1;
              server   127.0.0.1:8081 weight=1;
    }
    server {
        listen       83;
        server_name  www.zld.com;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass   http://www.zld.com;
	    proxy_set_header   Host  $host:83;
            proxy_set_header   X-Real-IP  $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            client_max_body_size  100m;
        }  

        location ~ ^/(WEB-INF)/ {
            deny all;
        }   

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }  

    }
}  

注意:红色字体部分是需要修改的地方。

www.zld.com的域名更换为自己需要的域名。

server   127.0.0.1:8080 weight=1;
server   127.0.0.1:8081 weight=1;

更换为后端Tomcat的ip的ip和端口,如果有多个按照该格式添加即可。

1.2、Tomcat配置

  使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager,下面简称msm)配置Tomcat和memcached实现session共享。

首先将下面的包下载到Tomcat的lib目录下,这些包都是msm所依赖的包。

[html] view
plain
 copy

  1. [[email protected] ~]# cd /usr/local/tomcat/lib/
  2. [[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
  3. [[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
  4. [[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
  5. [[email protected] lib]# wget http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
  6. [[email protected] lib]# wget http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar

下面修改Tomcat配置文件,让Tomcat结合memcached实现session共享

[[email protected] lib]# vi /usr/local/tomcat/conf/server.xml

在配置文件中加入如下内容

[html] view
plain
 copy

  1. <Context docBase="/var/www/html" path="" reloadable="true">
  2. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  3. memcachedNodes="n1:localhost:11211"
  4. requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
  5. sessionBackupAsync="false"
  6. sessionBackupTimeout="100"
  7. transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
  8. copyCollectionsForSerialization="false" />
  9. </Context>

说明:

这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:

n1:localhost:11211 n2:localhost:11212     /localhost改为安装memcached的服务器的IP

sessionBackupTimeout的单位为分钟

/var/www/html改为Tomcat服务器web根目录的路径

修改后重启两个TOMCAT和nginx即可,这个时候已经解决SESSION的共享问题.

测试Nginx和Tomcat

  测试Nginx是否实现负载均衡已经Tomcat能否共享session信息,分别在两个Tomcat服务器的/var/www/html目录下新建两个test.jsp页面

Tomcat1

[html] view
plain
 copy

  1. [[email protected] lib]# vi /var/www/html/test.jsp     /输入如下内容
  2. SessionID:<%=session.getId()%>
  3. <BR>
  4. SessionIP:<%=request.getServerName()%>
  5. <BR>
  6. SessionPort:<%=request.getServerPort()%>
  7. <%
  8. out.println("This is Tomcat Server 111111!");
  9. %>

Tomcat2

[html] view
plain
 copy

  1. [[email protected] lib]# vi /var/www/html/test.jsp     /输入如下内容
  2. SessionID:<%=session.getId()%>
  3. <BR>
  4. SessionIP:<%=request.getServerName()%>
  5. <BR>
  6. SessionPort:<%=request.getServerPort()%>
  7. <%
  8. out.println("This is Tomcat Server 222222!");
  9. %>

通过浏览器访问Nginx服务器,如下图将访问地址改成Nginx所在服务器。

反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。

时间: 2024-12-09 22:39:13

Nginx+Tomcat+Memcached集群Session共享的相关文章

【转】Nginx+Tomcat+Memcached集群Session共享

cookie是怎样工作的? 例 如,我们创建了一个名字为login的Cookie来包含访问者的信息,创建Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名 是“Michael Jordan”,同时还对所创建的Cookie的属性如path.domain.expires等进行了指定. Set-Cookie:login=Michael Jordan;path=/;domain=msn.com; expires=Monday,01-Mar-99 00:00:01 GMT 上面这个H

session服务器Nginx+Tomcat+Memcached集群Session共享

cookie是怎样工作的? 例如,我们创立了一个名字为login的Cookie来包含访问者的信息,创立Cookie时,服务器端的Header如下面所示,这里假设访问者的注册名是“Michael Jordan”,同时还对所创立的Cookie的属性如path.domain.expires等进行了指定. Set-Cookie:login=Michael Jordan;path=/;domain=msn.com; expires=Monday,01-Mar-99 00:00:01 GMT 下面这个Hea

Nginx+Tomcat7(tomcat6)+Memcached集群Session共享

Nginx+Tomcat7+Memcached集群Session共享 原理: 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对session的共享. 下载 1.      下载nginx 2.      下载tomcat7 (本文介绍的是tomcat7的session共享,如果是tomcat6,配置是不成功的,需要更换其中的jar包,m

Nginx+Tomcat+MemCached 集群配置手册

系统实施文档 Nginx+Tomcat+MemCached 集群配置手册 目    录 第1章   概述 1.1   目标 互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架构时会应用很多高性能的产品, 本文主要描述互联网架构中门户应用的集群的配置工作,最终用以指导系统实施. 1.2   预期读者 本文档用于指导系统工程师进行系统实施工作,架构师和系统工程师应该通读本文档,选择适当版本用于自己的系统架构. 第2章   产品介绍 2.1   Nginx介绍 Nginx是一

企业网站架构之Nginx+tomcat+memcached集群

nginx+tomcat+memcached应用 系统环境:RHEL6.4  x64   iptables -F   and selinux is disabled 主机角色:node1 :192.168.0.24 :lnmp环境 tomcat memcached node2 :192.168.0.99 : tomcat memcached 软件下载:在lnmp环境上测试tomcat,使用nginx简单发布jsp jdk-6u32-linux-x64.bin apache-tomcat-7.0.

Nginx + Tomcat + Memcached 集群

Nginx + Tomcat + Memcached 的集群至少要考虑到2个方面的问题: 1. 如何实现负载均衡? 2. 如何实现session复制与同步? 本文搜集了网上相关的材料,将Nginx + Tomcat + Memcached 的集群在window下的搭建过程总结如下. 一.开发环境 1. nginx版本:1.8.0 2. tomcat版本:7.0.55 3. memcached版本:1.4.13 4. session复制同步使用memcache-session-manager最新版

Nginx+Tomcat+Memcached集群

Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的效率比较低,在大并发下表现并不好.原理:http://zyycaesar.iteye.com/blog/296606 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单.但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了. 利用nginx插件实现

Apache Tomcat 整合集群 session 共享

Apache Tomcat 整合集群 所需软件 CentOS6.5 64 Apache2.2.15 Tomcat7.0.62 JDK 1.8.0_45 tomcat-connectors 1.2.40 MySQL<可选> PHP<可选> 一   安装A服务器安装  IP  192.168.150.7 apache php mysql yum install httpd httpd-devel php php-devel php-gd php-mysql php-mbstring m

细说tomcat之集群session共享方案

1. Tomcat Cluster官网:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.htmlTomcat原生支持的集群方案. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catali