Nginx+tomcat+memcached解决集群的session问题

Tomcat集群session同步方案有以下几种方式:

· 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。原理:http://zyycaesar.iteye.com/blog/296606

· 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

· 利用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能,可通过http://code.google.com/p/nginx-upstream-jvm-route/downloads/list获取。

· 利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。

以下使用第四种方案,集群环境:

系统版本:centos 6.4 X64

1. nginx最新版本:1.6.0

2. tomcat版本:apache-tomcat-7.0.61

3. memcached最新版本:1.4.0

4. Jdk 版本:1.7.0_75

fss

一、安装配置nginx

[[email protected] ~]# yum -y install pcre*
[[email protected] ~]#tar -zxvf nginx-1.6.0.tar.gz
[[email protected] ~]#mkdir /usr/local/nginx
[[email protected] ~]#./configure --prefix=/usr/local/nginx
[[email protected] ~]#make && make install

配置nginx:

[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
    server { 
        listen       80;
        server_name  localhost;
       index        index.jsp;          ##因为首页是jsp文件,所以把首页直接定向给后端的8080端口的tomcat来处理
        root  /usr/local/apache-tomcat-7.0.61/webapps/ROOT;

        location ~ .*.jsp$
        {
                index  index.jsp;
                proxy_pass http://127.0.0.1:8080;
                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;
                proxy_connect_timeout   90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;
                client_max_body_size 10m;
                client_body_buffer_size 128k;
                proxy_buffer_size 64k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
        }

保存退出后,启动nginx

二、安装memcached

[[email protected] ~]# yum install libevent libevent-devel

[[email protected] ~]# wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz

[[email protected] ~]# tar zxf memcached-1.4.0.tar.gz

[[email protected] ~]# ./configure
[[email protected] ~]# make && make install

[[email protected] ~]# /usradd -s /sbin/nologin memcached

安装成功(默认安装在/usr/loca/bin下)

2、启动memcached的服务端
 [[email protected] ~]# /usr/local/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u memcached -c 256          (也可以启动多个memcached服务端,但端口不能相同)

-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB,

-u是运行Memcache的用户,我这里是memcached,

-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址127.0.0.1,

-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,

-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,

至此,memcached已启动!

三、安装两个tomcat :

[[email protected]st ~]# tar -zxvf apache-tomcat-7.0.61.tar.gz

[[email protected] ~]# cp -rf apache-tomcat-7.0.61  /usr/local/

[[email protected] ~]#cp -rf apache-tomcat-7.0.61  /usr/local/apache-tomcat-7.0.61-2

[[email protected] ~]#vim /etc/profile/

export TOMCAT_HOME=/usr/local/apache-tomcat-7.0.61

export CATALINA_HOME=/usr/local/apache-tomcat-7.0.61

export CLASSPATH=$CLASSPATH:$CATALINA_HOME/lib

export CATALINA_BASE=/usr/local/apache-tomcat-7.0.61

export TOMCAT_HOME2=/usr/local/apache-tomcat-7.0.61-2

export CATALINA_HOME2=/usr/local/apache-tomcat-7.0.61-2

export CLASSPATH2=$CLASSPATH2:$CATALINA_HOME2/lib

export CATALINA_BASE2=/usr/local/apache-tomcat-7.0.61-2

因为一台主机启动了多个tomcat,所以需要修改第二个tomcat的catalina.sh文件的环境变量

[[email protected] ~]#vim /usr/local/apache-tomcat-7.0.61-2/bin/catalina.sh   在文件前端增加

export CATALINA_BASE=$CATALINA_BASE2

export CATALINA_HOME=$CATALINA_HOME2

配置tomcat:

1、tomcat最重要的一项,在conf/context.xml里增加与memcached的链接(两个tomcat都需要做!)

[[email protected] ~]#vim /usr/local/apache-tomcat-7.0.61/conf/context.xml

在Context标签内增加:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" sessionBackupAsync="false" sessionBackupTimeout="1800000" copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

千万注意:此 Manager 标签是一行!并且一定要检查多没多空格什么的!不然报错,很蛋疼!

Manager标签属性说明:
    className 此属性是必须的。
    memcachedNodes  此属性是必须的,这个属性必须包含你所有运行的memcached节点,每个节点的定义格式为<id>:<host>:<port>, 多个之间用空格或半角逗号隔,如果只有一个memcached,就不需要写节点ID。
    requestUriIgnorePattern  可选项,此属性是那些不需备份Session的请求的正则表达式。
    sessionBackupAsync  设置为false即是设置为非沾粘session。
    sessionBackupTimeout  可选项,默认100,单位毫秒。
    transcoderFactoryClass 可选,默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory,上述配置使用kryo策略,效率主要体现在高并发下。

2、修改第二个tomcat的启动端口为 8090


在tomcat/lib库中添加mem和msm的依赖jar包:


本例中使用的jar包文件版本:

asm-3.2.jar

kryo-1.04.jar

kryo-serializers-0.11.jar

memcached-session-manager-1.7.0.jar

memcached-session-manager-tc7-1.8.1.jar

minlog-1.2.jar

msm-kryo-serializer-1.7.0.jar

reflectasm-1.01.jar

spymemcached-2.7.3.jar

把这些jar包,都拷入tomcat的 lib 目录中 ,两个tomcat都要拷贝

然后启动两个tomcat,查看日志有无问题。

把session测试文件放入tomcat的ROOT目录中测试

注意:因为本例只用了一台服务器,前端nginx反向代理第一台tomcat,第二台tomcat的端口是8090。所以需要在第一台tomcat的页面上做一个跳转,跳到第二个tomcat上,如果第二个tomcat能够获取到session值,那么既为成功!

至此,配置完成!

时间: 2024-07-29 17:03:52

Nginx+tomcat+memcached解决集群的session问题的相关文章

Nginx+Tomcat+Memcached 实现集群部署时Session共享

一.简介 我们系统经常要保存用户登录信息,有Cookie和Session机制,Cookie客户端保存用户信息,Session在服务端保存用户信息,如果浏览器不支持Cookie或者用户把Cookie禁掉了,Cookie就用不了,还有不同的浏览器采用不用方式保存Cookie,所以我们采用Session服务端来保存,上一节我们有介绍了Tomcat集群部署,怎么样集群的Tomcat对同个用户请求的都能获取保存在Session的用户信息,采用了Memcached管理Session,Memcached 是一

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境).Nginx 1.9.8.Redis 3.2.1 一.背景 在使用Nginx+Tomcat实现负载均衡的时候,由于Nginx对不同的请求分发到某一个Tomcat,Tomcat在运行的时候分别是不同的容器里,因为会出现session不同步或者丢失的问题. 二.Nginx安装与配置 1.Nginx安装 网上的资源对于安装Nginx的介绍比较多,例如最简单的为: (1) 获取nginx,在http://nginx.org/download/上可以获取当前最新的

使用Redis存储Nginx+Tomcat负载均衡集群的Session (笔记)

引用:http://blog.csdn.net/xlgen157387/article/details/52024139 注意事项: nginx配置文件nginx.conf: upstream mynginxserver {    #weigth参数表示权值,权值越高被分配到的几率越大    #本机上的Squid开启3128端口        server 127.0.0.1:8080 weight=1;        server 127.0.0.1:8060 weight=1;    } s

nginx+tomact+memcached(缓存)集群

关于Nginx+tomcat+memcached(缓存)配置集群负载均衡的下载与安装流程: 实现的整体步骤 一:安装memcached.(memcached可以一个或者多个) 二:安装两个tomcat 三:配置msm. 四:安装nginx,实现负载均衡. 以下是详细步骤: 第一步:安装memcached 1.       下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:csdn 第二步:安装tomcat 1.       安装两个tomcat6,如果

LVS+Keepalived+Nginx+Tomcat高可用集群搭建(转)

LVS+Keepalived+Nginx+Tomcat高可用集群搭建 最近公司重整架构,十几台服务器而且还要尽可能节约成本.我就谷歌了一下在几种集群之前进行比较最终采用了Keepalived+Nginx做负债均衡高可用.虽然之前也研究过集群,看过很多集群方面的原理和架构,但毕竟没有真正操作过以下案例是在虚拟机中完成实验其实对于高可用搭建来说只用给出Keepalived和Nginx的配置即可后面的一些安装搭建完全是本人项目需要可以不用理睬仅供参考. 本文只是实验搭建记录方便以后在服务器中实施搭建.

nginx+tomcat+redis的集群+session共享

环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 jdk下载及安装,目前很多好的资源和步骤,此处省略. 3.redis版本以及下载地址.安装步骤 wget http://download.redis.io/redis-stable.tar.gztar xvzf redis-stable.tar.gzcd redis-stablemake 前面3步应该没有问题,主要的问题是执行make的时候,出现了异常.异常一

Nginx+Tomcat 负载均衡集群

案例分析 通常情况下,一台Tomcat站点由于可能出现单点故障及无法应对多客户复杂多样性的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构. Nginx是一款非常优秀的http服务器软件,他能够支持最高达50000个并发连接数的响应,拥有强大的静态 资源处理能力,运行稳定,并且内存.cpu等系统资源消耗非常低.目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升站点的负载并发能力. 本案例我们以Nginx作为负载均衡器,T

实战Nginx+Tomcat负载均衡集群

实验环境:RHEL6.5  server1.example.com 172.25.254.1                                           server2.example.com 172.25.254.2      实验内容: 1.tomcat基本配置     1.1安装tomcat 1.2配置环境变量并启动tomcat 1.3设置开机启动 2.配置测试网页 (1)自己写的JSP测试页进行测试 (2) 网络中的测试页 3.编辑nginx的配置文件 4.测试访

Redhat/CentOS7-环境虚拟机简单搭建Nginx+Tomcat负载均衡集群

Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选.由于Tomcat处理静态HTML的能力运不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端. Nginx服务器能支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存.CPU等系统资源消耗非常低. 通常情况下,一个Tomcat站点由于可能出现单点故障及无法应付过多客户复杂请求等问题,不能单独应用于生产环