httpd+tomcat+memcached实现session保持

本节我将带大家认识tomcat以及如何基于memcached实现tomcat的会话保持。好了废话不多说,下面我们就开始了。

tomcat的介绍

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。实际上Tomcat 是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。通常在我们的应用过程中,我们让Apache 来处理HTML页面请求,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

tomcat的安装

首先我们要做到是部署Java环境,只有安装JDK即可。

这里我已经有下好的JDK了

我使用的是jdk-7u9-linux-x64.rpm这个版本

直接安装即可。

[[email protected] ~]# rpm -ivh jdk-7u9-linux-x64.rpm

tomcat的话我这里也是下载好了。直接解压就可以用了apache-tomcat-7.0.55.tar.gz

[[email protected] ~]# tar xf apache-tomcat-7.0.55.tar.gz -C /usr/local/             我们把它放在/usr/local/

一般我们都做个链接

[[email protected] local]# ln -sv apache-tomcat-7.0.55/ tomcat

下面修改下环境变量

[[email protected] local]# cat /etc/profile.d/java.sh                      这个是Java的变量

JAVA_HOME=/usr/java/latest  
PATH=$JAVA_HOME/bin:$PATH    
export JAVA_HOME PATH

[[email protected] local]# cat /etc/profile.d/tomcat.sh                  这个是tomcat的

export CATALINA_HOME=/usr/local/tomcat  
export PATH=$CATALINA_HOME/bin:$PATH

好了下面就可以使用Catalina.sh 来启动了                                      Catalina.sh是服务启动脚本

[[email protected] local]# catalina.sh start  
Using CATALINA_BASE:   /usr/local/tomcat    
Using CATALINA_HOME:   /usr/local/tomcat    
Using CATALINA_TMPDIR: /usr/local/tomcat/temp    
Using JRE_HOME:        /usr/java/latest    
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar    
Tomcat started.

这样tomcat就启动了。

[[email protected] local]# netstat -tnlp  
Active Internet connections (only servers)    
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1473/rpcbind       
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1726/sshd          
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1578/cupsd         
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1823/master        
tcp        0      0 0.0.0.0:46718               0.0.0.0:*                   LISTEN      1549/rpc.statd     
tcp        0      0 :::36716                    :::*                        LISTEN      1549/rpc.statd     
tcp        0      0 :::111                      :::*                        LISTEN      1473/rpcbind       
tcp        0      0 :::8080                     :::*                        LISTEN      2147/java          
tcp        0      0 :::22                       :::*                        LISTEN      1726/sshd          
tcp        0      0 ::1:631                     :::*                        LISTEN      1578/cupsd         
tcp        0      0 ::1:25                      :::*                        LISTEN      1823/master        
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      2147/java          
tcp        0      0 :::8009                     :::*                        LISTEN      2147/java

通过上面的结果我们可以看出该服务启动了3个端口:8080   8009    8005

下面我们就可以直接通过浏览器看下了。通过8080端口访问。

OK,tomcat服务以及可以启用了。

那么下面我们就来看看如何构建Apache+tomcat+memcached架构

实验:  
前端Apache:192.168.1.200

tomcat节点:192.168.1.201(TomcatA),192.168.1.202(TomcatB)  
memcached节点(一主一备实现高可用):192.168.1.201, 192.168.1.202    (机器内存有限,所以就没有用独立的主机了)    
实验拓扑图:

前端Apache服务器配置

我们这里用到的是Apache的代理模块,由于centos6.5中内核支持该代理模块,因此我们只需要直接yum安装httpd然后再配置文件中加入以下文件即可:

[[email protected] ~]# vim /etc/httpd/conf.d/mod_proxy.conf    
<Proxy balancer://lbcluster1>    
BalancerMember http://192.168.1.202:8080 loadfactor=1
BalancerMember http://192.168.1.201:8080 loadfactor=1    
ProxySet lbmethod=byrequests    
</Proxy>

ProxyVia Off  
ProxyRequests Off  
ProxyPass / balancer://lbcluster1/  
ProxyPassReverse / balancer://lbcluster1/

memcached服务器

缓存服务器直接在2个节点上yum安装即可,非常简单

yum install memcached

安装好之后启动服务

[[email protected] ~]# service memcached start  
Starting memcached:                                        [  OK  ]

可以看到11211端口打开

[[email protected] ~]# ss -tnl  
State       Recv-Q Send-Q                      Local Address:Port                        Peer Address:Port    
LISTEN      0      128                                    :::11211                                 :::*    
LISTEN      0      128                                     *:11211                                  *:*

tomcat端配置

最关键的就是tomcat的配置了

实现会话保持我们用到的是memcached-session-manager,而他需要一下几个类库,我已经下载好了

这个是项目官方地址,可以到这里进行下载http://code.google.com/p/memcached-session-manager/

[[email protected] msm]# ls  
javolution-5.5.1.jar

memcached-session-manager-tc7-1.8.2.jar

spymemcached-2.10.2.jar

memcached-session-manager-1.8.2.jar

msm-javolution-serializer-1.8.2.jar

将这几个类库放到tomcat的lib库中,

[[email protected] msm]# cp * /usr/local/tomcat/lib/

进去看下,确保复制成功

好了下面就开始修改配置文件/usr/local/tomcat/conf/server.xml

分别在两个tomcat上的host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:

 <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">   

              <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"    

           memcachedNodes="n1:192.168.1.201:11211,n2:192.168.1.202:11211"          #这里分别指向2台memcached服务器    

                failoverNodes="n1"    

                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"    

                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"    

              />    

             </Context>

提供测试相应的文件夹及测试文件:

tomcatA:      
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

mkdir: created directory `/usr/local/tomcat/webapps/test‘  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF‘    
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/classes‘    
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/lib‘

# vim /usr/local/tomcat/webapps/test/index.jsp    
<%@ page language="java" %>    
<html>    
  <head><title>TomcatA</title></head>    
  <body>    
    <h1><font color="red">TomcatA.magedu.com</h1>    
    <table align="centre" border="1">    
      <tr>    
        <td>Session ID</td>    
    <% session.setAttribute("magedu.com","magedu.com"); %>    
        <td><%= session.getId() %></td>    
      </tr>    
      <tr>    
        <td>Created on</td>    
        <td><%= session.getCreationTime() %></td>    
     </tr>    
    </table>    
  </body>    
</html>

复制web.xml文件

# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/

tomcatB:      
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}

mkdir: created directory `/usr/local/tomcat/webapps/test‘  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF‘  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/classes‘  
mkdir: created directory `/usr/local/tomcat/webapps/test/WEB-INF/lib‘

# vim /usr/local/tomcat/webapps/test/index.jsp  
<%@ page language="java" %>    
<html>    
  <head><title>TomcatB</title></head>    
  <body>    
    <h1><font color="blue">TomcatB.magedu.com</h1>    
    <table align="centre" border="1">    
      <tr>    
        <td>Session ID</td>    
    <% session.setAttribute("magedu.com","magedu.com"); %>    
        <td><%= session.getId() %></td>    
      </tr>    
      <tr>    
        <td>Created on</td>    
        <td><%= session.getCreationTime() %></td>    
     </tr>    
    </table>    
  </body>    
</html>

复制web.xml文件

# cp /usr/local/tomcat/conf/web.xml /usr/local/tomcat/webapps/test/WEB-INF/

好了下面我们就可以开始测试了

OK,sessionID没变,会话成功保持。

那么本节的内容就讲到这里,老规矩,有什么不好地方欢迎大家的批评指正,谢谢!

时间: 2024-12-23 05:10:04

httpd+tomcat+memcached实现session保持的相关文章

Httpd+Tomcat+memcached实现session server

何为会话保持 会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题.会话保持有时候又叫做粘滞会话(Sticky Sessions).会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求会保持分配到一台服务器上 何时需要会话保持 在讨论这个问题前,我们必须先花点时间弄清楚一些概念:什么是连接(Connection).什么是会话(Session),以及这二者之间的区别.需要特别强调的是,如果我们仅仅是谈论负载均衡,

【Tomcat】Tomcat + Memcached 实现session共享

概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解决方案 环境 操作系统:Linux( centOS 6..5 版) 软件:Tomcat7    Memcached 实现原理 Tomcat + Memcached 实现session共享流程图 配置 安装Tomcat 2个和Memcached 1个,参考[Linux]Tomcat安装及一个服务器配置

tomcat实现session集群及tomcat+memcached共享session存储(四)

接博客nginx或httpd实现负载均衡tomcat(三) tomcat实现会话管理原理及实现: tomcat管理会话使用的专用的会话管理组件,tomcat的会话管理器有4种: 1.标准会话管理器(StanderdManager) 2.持久会话管理器(PersistentManager可以基于文件存储(FileStore)或JDBC存储(JDBCStore)) 基于JDBC的话就可以实现高可用tomcat的session集群. 1.DeltaManager会话管理器 2.BackupManage

tomcat cluster和tomcat+memcached实现Session会话保持

Tomcat Cluster: tomcat基于内存复制的集群,tomcat集群各节点通过建立tcp链接来实现session的复制,tomcat启动时,一个cluster对象(默认配置下是SimpleTcpCluster)会启动membership服务和Replication服务(用于建立tcp链接),membership服务记录了集群当前节点的信息,当一台节点接收http请求并产生一个新session时,调用Replication服务建立tcp连接把Session复制到membership列表

Tomcat+Memcached实现Session共享

在先前的例子中,我用Tomcat官方提供的Session复制方式实现Tomcat集群Session共享.今天,我用另一种方式Memcached-Session-Manager来实现Session共享.话不多说,上实例. Memcached-Session-Manager将Session序列化到Memcache中,序列化的组件有很多,比如: msm-kryo-serializer.msm-javolution-serializer等,这里使用msm-javolution-serializer,使用

【电商】nginx+tomcat+memcached实现session共享集群

在分布式多tomcat web集群环境下,首先要解决的是session的共享问题,一般的实现思路有: (1) session复制:多tomcat之间进行session的同步,集群中的tomcat存储相同的session信息 (2) 共享session存储:将session集中存储在同一个地方,如redis/memcached,甚至DB.tomcat本身的内存中并不存储session (3) session粘性:其实session粘性并不是session共享的方案,而是多tomcat的集群方案,配

tomcat篇之结合apache+tomcat+memcached做session共享

tomcat1:192.168.1.155 tomcat2:192.168.1.11 apache:192.168.1.155 前端代理apache设置,参考前面的tomcat文章(基于mod_proxy和mod_jk模块) 这里不再赘述,直接贴配置文件: cd /etc/httpd/conf.d [[email protected] conf.d]# cat mod_jk.conf LoadModule  jk_module  modules/mod_jk.so JkWorkersFile/e

nginx+tomcat+memcached实现session共享

一.工作原理及原理图<img class="alignnone wp-image-31" src="http://119.29.25.60/wp-content/uploads/2016/04/图片1.bmp" alt="图片1" width="342" height="254" />工作原理        Tomcat中自带缓存功能.Memcached时一个集中式缓存器,可以利用tomcat和

nginx+tomcat+memcached构建session共享集群

一.安装配置tomcat 配置前说明: 系统为centos7 m1.xsllqs.com地址为192.168.1.107 c1.xsllqs.com地址为192.168.1.114 c2.xsllqs.com地址为192.168.1.113 安装tomcat需要配合JDK使用,JDK有oracle JDK和open JDK两种 oracle JDK8的下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-down