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.www58058.com/6746

(0)
馬行空馬行空
上一篇 2015-07-30
下一篇 2015-08-03

相關推薦

  • Linux基礎解析;echo;man;centos;runlevel;PS1;screen;shell 倒三角;date -d等命令—-fazion blog at22.July

    Linux基礎解析 fazionlan blog in 178Linux.July 20nd. 內核、版本信息 # uname -a                 &n…

    Linux干貨 2016-07-29
  • Linux的哲學思想第二篇

    Linux的哲學思想 一切皆文件 物理終端 物理終端指的是顯示器等硬件終端設備,文件存在于 /dev/console 這個路徑下 虛擬終端 虛擬終端指的是在linux命令行連接的終端,文件存在于 /dev/tty# [1,6] 這個路徑下 串行終端 指的是使用計算機串行端口連接的終端設備,文件存在于 /dev/ttyS# 這個路徑下 偽終端 指的是在Xshe…

    2018-02-26
  • nginx 基礎筆記

    一、Nginx 優點 高性能web,可以支持反向代理 比Apache性能優越,支持更多的并發連接,但資源占用很少,輕量級的web服務器??梢灾С指哌_50000個并發連接數的響應 Nginx 在Linux 2.6+ 使用epoll模型,提供卓越性能 做為負載均衡服務器,可以在內部直接支持PHP和Rails,也可以支持作為HTTP代理服務器對外進行服務 Ngin…

    Linux干貨 2016-03-19
  • 馬哥教育網絡班22期+第1周課程練習

    問題1: 計算機組成如下:CPU、存儲器、輸入設備、輸出設備1、中央處理器(Central Processing Unit,簡稱 CPU)。它主要由控制器、運算器等組成,并采用大規模集成電路工藝制成的芯片,又稱微處理器芯片。   CPU又由運算器和控制器組成。1)運算器 運算器又稱算術邏輯單元(Arithmetic Logic Unit簡…

    Linux干貨 2016-08-15
  • 自制linux系統

    本文主要通過裁剪現有Linux系統,打造一個屬于自己的Linux小系統,讓其能夠裝載網卡驅動,并配置IP地址,實現網絡功能。 自制linux系統 步驟概述: 1、新建一個硬盤2、在該新硬盤上新建兩個分區,一個當boot分區,一個當/分區3、格式化并且掛載兩個分區4、安裝grub至目標磁盤5、為grub提供配置文件6、復制內核文件和initrd文件7、創建目標…

    Linux干貨 2016-09-13
  • Bash編程之條件測試

    Bash 包含強大的編程功能,其中包括豐富的可測試文件類型和屬性的函數,以及在多數編程語言中可以使用的算術和字符串比較函數。理解不同的測試并認識到 shell 還能把一些操作符解釋成 shell 元字符,是學好Bash編程的重要一環。 一、測試命令 Bash中一條命令退出狀態碼可作為測試條件,執行成功返回0,代表布爾類型true;反之執行失敗返回1-255之…

    Linux干貨 2016-08-21
欧美性久久久久