Memcached实现Tomcat的session会话绑定

memcached介绍:

 Memcached是一个高性能的分布式内存对称缓存系统;通过缓存查询数据库结果,介绍数据库访问次数,以提高web应用的速度、提高扩展性。

 Memcached特点:

  协议简单

  基于libevent的事件处理

  内置内存存储方式

 memcached不互相通信的分布式

一、使用环境准备

 实验环境:

  TomcatA(node2):172.16.2.13

  TomcatB(node3):172.16.2.14

  memcached(node1):172.16.2.12 

  memcached(node4): 172.16.2.15

  Nginx(node5): 172.16.2.16

 实验使用软件:

 1.png

二、配置tomcat节点

TomcatA节点:                

1、安装jdk

[root@node2 tomcat]# rpm -ivh jdk-7u67-linux-x64.rpm 
Preparing...                ########################################### [100%]
1:jdk                    ########################################### [100%]
Unpacking JAR files...
	rt.jar...
	jsse.jar...
	charsets.jar...
	tools.jar...
	localedata.jar...
	jfxrt.jar..
[root@node2 tomcat]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$PATH/bin:$PATH
[root@node2 tomcat]# source /etc/profile.d/java.sh

验证jdk安装

[root@node2 src]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

2、安装tomcat

[root@node2 tomcat]# tar xf apache-tomcat-7.0.55.tar.gz -C /usr/local
[root@node2 tomcat]# cd /usr/local
[root@node2 local]# ln -sv apache-tomcat-7.0.55/ tomcat
`tomcat' -> `apache-tomcat-7.0.55/'
[root@node2 src]# cat /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@node2 src]# source /etc/profile.d/tomcat.sh

验证tomcat安装

[root@node2 bin]# cat /etc/profile.d/tomcat.sh 
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@node2 bin]# source /etc/profile.d/tomcat.sh
[root@node2 bin]# catalina.sh version
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
Server version: Apache Tomcat/7.0.55
Server built:   Jul 18 2014 05:34:04
Server number:  7.0.55.0
OS Name:        Linux
OS Version:     2.6.32-504.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_67-b01
JVM Vendor:     Oracle Corporation
node3安装与node2安装相同,这里就不在演示了

3、测试tomcat安装是否成功

启动taomcat
[root@node2 ~]# catalina.sh start
[root@node3 ~]# catalina.sh start

访问测试:

2.png3.png三、配置memcached节点

安装memcached

[root@node1 ~]# yum -y install memcached  libmemcached

启动memcached

[root@node1 ~]# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]

查看监听端口:默认为11211

[root@node1 ~]# ss -tlnp
State       Recv-Q Send-Q                   Local Address:Port      Peer Address:Port                                                     
LISTEN      0      128                     *:11211                                *:*
node4节点配置与node1节点配置相同这里就不在演示了

四、配置tomcat节点支持memcached

TomcatA节点:

添加memcached的相关组件

[root@node2 tomcat]# cp memcached-session-manager-tc7-1.8.2.jar memcached-session-manager-1.8.2.jar javolution-5.5.1.jar msm-javolution-serializer-1.8.2.jar spymemcached-2.10.2.jar  /usr/local/tomcat/lib/

添加一个容器:在默认的虚拟主机中添加

<Host name="localhost"  appBase="webapps unpackWARs="true" autoDeploy="true">
  <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true">
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     memcachedNodes="n1:172.16.2.12:11211,n2:172.16.2.15:11211"   定义memca节点
     failoverNodes="n2"  故障转移主机,n2为上面的定义的主机
     requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"当请求的内容匹配此处定义的时忽略
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory     "/>
 </Context>
</Host>

创建对应的测试目录和默认文档

[root@node2 tomcat]# mkdir /usr/local/tomcat/webapps/test/{lib,classes,WEB-INF} 创建虚拟目录
[root@node2 tomcat]# 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</font></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>

重新启动tomcat

[root@node2 tomcat]# catalina.sh stop
[root@node2 tomcat]# catalina.sh start

访问测试:

6.png

TomcatB节点与TomcatA节点配置相同,而index.jsp内容如下
[root@node3 tomcat]# cat  /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color="blue">TomcatB.magedu.com</font></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>

访问node3节点测试:

5.png

五、配置Nginx节点

1、安装Nginx

[root@node5 ~]# yum -y install nginx

2、配置nginx负载tomcat

[root@node5 ~]# vim /etc/nginx/nginx.conf 
 http {
  upstream tomcat {
     server 172.16.2.13:8080;
     server 172.16.2.14:8080;
    }
  }
  
[root@node5 ~]# vim /etc/nginx/conf.d/default.conf  
 location / {
       # root   /usr/share/nginx/html;
        index  index.jsp index.html index.htm;
       proxy_pass http://tomcat/;
    }

3、启动nginx

[root@node5 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@node5 ~]# /etc/init.d/nginx start
Starting nginx:                                            [  OK  ]

4、访问测试:会发现只有标题会发生变化,而session id不会发生变化

7.png8.png

六、模拟memcached故障,查看session有node4节点负责,但没有发生变化

1、模拟故障:停止node1的memcached

[root@node1 ~]# /etc/init.d/memcached  stop
Stopping memcached:                                        [  OK  ]

2、访问测试,

9.png10.png

实验完成,大家在做的时候要是遇到问题可以一起解决,仅供跟人学习使用,请大神勿喷,谢谢。

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6746

(0)
马行空马行空
上一篇 2015-07-30 09:58
下一篇 2015-08-03 00:04

相关推荐

  • N25-第一周博客作业

    1、描述计算机的组成及其功能:    没有听马哥视频之前,计算机的组成理解为主机+显示器;    听完视频之后,对计算机的组成分为硬件系统和软件系统。    硬件系统主要有:运算器、控制器、存储器、输入设备和输出设备;    软件系统主要有…

    Linux干货 2016-12-04
  • LV+M

    1、查看分区情况: 2、创建sdc分区,并且更改分区类型为8e  3、同样步骤2操作,创建sdd分区 4、创建物理卷pv: 5、查看当前系统的物理卷: 6、创建卷组vg: 7、查看当前系统的卷组: 8、创建逻辑卷lv: 9、查看当前系统的逻辑卷: 10、创建文件系统ext4: 11、创建目录/mnt/lv1并且挂载: 12、扩展物理卷: 13、扩展…

    Linux干货 2016-09-19
  • ☞Linux进程管理与性能分析

    Linux进程管理与性能分析 概述 系统维护的一个重要工作就是监控Linux系统的运行状态是否正常,分析系统资源的使用情况,进而对系统进行优化,提高其性能。在实际环境中,系统稳定性尤为重要,可以说系统的稳定性关系到企业的存亡。因此,第一时间掌握CPU、Memory、IO、Network的等系统资源的状态则可以在系统出现问题时及时解决,把损失降到最低。&nbs…

    Linux干货 2016-09-11
  • 马哥教育网络班22期+第二周课程练习

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示? cp命令:copy,有2类复制方法  1、单源复制:如果DEST不存在:则实现创建此文件,并复制源文件的数据流至DEST中;     如果DEST存在:如果DEST是非目录文件,则覆盖目标文件;如果DEST是目录文件,则先DEST目录下创建一个与源文件…

    Linux干货 2016-08-22
  • 命令(2017.5.16-2017.519-部分)

    命令(1) bc  计算器 dd if=/dev/zero 查看逻辑设备(非硬件) dd if=/dev/sd 查看硬件设备 dd if=/dev/zeroof=file bs=1M count=24  写入磁盘速度 dd if=/dev/zeroof=/dev/null bs=1M count=24  测试…

    Linux干货 2017-05-22
  • Linux文件查找的使用方法

    文件查找的方法 locate命令       非实时查找(数据库查找): locate查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db    依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);管理员手动更新数据库(updated…

    Linux干货 2016-08-15