Memcached + MSM 實現Tomcat Session保持

Memcached + MSM 實現Tomcat Session保持


tomcat memcached

前言

上篇文章我們實現了session stickysession cluster實現用戶session的保持, 這篇文章主要介紹使用Memcached + MSM來實現用戶session的保持

Memcached介紹

Memcached是一款免費、開源、分布式的內存對象緩存系統, 用于減少數據庫的負載, 加快web應用程序的訪問. Memcached簡單并且強大, 其簡單的設計加快了部署, 易于開發, 緩存解決了面臨的大量數據時很多的問題

官方站點: http://memcached.org/

MSM介紹

MSM(memcached session manager), MSM是一款實現Tomcat會話保持的管理組件, 支持粘性和無粘性的配置, 目前可以在Tomcat6,7,8中使用, 并且支持Memcached會話故障轉移

GitHub https://github.com/magro/memcached-session-manager

實驗拓撲

blob.png

實驗環境

由于我們虛擬機數量不夠, 所以MemcachedTomcat運行在同一節點

主機 IP 功用
node1.anyisalin.com 172.16.1.2 Nginx
node2.anyisalin.com 172.16.1.3 TomcatA,Memcached Node
node3.anyisalin.com 172.16.1.4 TomcatB,Memcached Node

實驗步驟

安裝配置Tomcat

我們首先配置Tomcat, 安裝過程這里不做敘述, 不明白的可以看我上篇博客: tomcat基礎進階

安裝Tomcat,node2,3都要操作

[root@node1 ~]# [root@node1 ~]# wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz
[root@node1 ~]# tar xf apache-tomcat-8.0.33.tar.gz  -C /usr/local/
[root@node1 ~]# cd /usr/local ; ln -sv apache-tomcat-8.0.33 tomcat ; cd ~
[root@node1 ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm #如果下載出錯, 使用瀏覽器下載
[root@node1 ~]# rpm -ivh jdk-8u77-linux-x64.rpm   #安裝JDK

[root@node1 ~]# vim /etc/profile.d/java.sh     #定義JAVA_HOME
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin
:$PATH

[root@node1 ~]# vim /etc/profile.d/tomcat.sh    #配置tomcat的環境變量
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin
:$PATH

[root@node1 ~]# source /etc/profile.d/tomcat.sh
[root@node1 ~]# source /etc/profile.d/java.sh

配置虛擬主機

[root@node2 ~]# vim /usr/local/tomcat/conf/server.xml   

#設置默認虛擬主機為web1.anyisalin.com #node3的jvmRoute設置為TomcatB
<Engine name="Catalina" defaultHost="web1.anyisalin.com" jvmRoute="TomcatA">  


#添加虛擬主機
<Host name="web1.anyisalin.com" appBase="/data/webapps/" unpackWARS="true" autoDeploy="true">
  <Context path="" docBase="/data/webapps" reloadable="true" />
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
       prefix="web1_access_log." suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

[root@node2 ~]# mkdir -PV /data
/webapps/{WEB-INF,META-INF,classes,lib}  #創建目錄

node2創建網頁文件

[root@node2 ~]# cd /data/webapps/

[root@node2 ~]# vim 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>

[root@node2 webapps]# catalina.sh start #啟動tomcat

node3創建網頁文件

[root@node3 ~]# cd /data/webapps/

[root@node3 ~]# vim 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>

[root@node3 webapps]# catalina.sh start #啟動tomcat

訪問測試

blob.png

blob.png

安裝配置Nginx負載均衡

安裝nginx

在node1上安裝配置
[root@node1 ~]# yum install nginx -y  #確保有epel源

配置nginx

[root@node1 ~]# vim /etc/nginx/conf.d/default.conf  #修改以下字段
   upstream tmcat_server {
       server 172.16.1.3:8080;
       server 172.16.1.4:8080;
   }

   location / {
       proxy_pass http://tmcat_server;
   }

[root@node1 ~]# service nginx start  #啟動nginx

測試負載均衡效果

Memcached + MSM 實現Tomcat Session保持

安裝配置Memcached + MSM

下面所有操作在node2,node3都需要執行

安裝Memcached

[root@node2 ~]# yum install memcached -y     #在node2上安裝memcached
[root@node3 ~]# yum install memcached -y     #在node3上安裝memcached

下載MSM的類庫文件到/usr/local/tomcat/lib 下載地址

[root@node2 ~]# cd /usr/local/tomcat/lib/        

##我這里本地已經有這些文件了
[root@node2 ~]# mv javolution-5.5.1.jar memcached-session-manager-tc7-1.8.2.jar memcached-session-manager-1.8.2.jar spymemcached-2.10.2.jar msm-javolution-serializer-1.8.2.jar /usr/local/tomcat/lib/

編輯tomcat配置文件

<Host>下的<Context> 中添加下面這些字段
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
     memcachedNodes="n1:172.16.1.3:11211,n2:172.16.2.4:11211"
     failoverNodes="n2"
     requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>

啟動Memcached重啟Tomcat并驗證

[root@node2 ~]# service memcached start
[root@node2 ]# catalina.sh stop
[root@node2 ]# catalina.sh start

[root@node3 ~]# service memcached start
[root@node3 ]# catalina.sh stop
[root@node3 ]# catalina.sh start

測試

看!我們通過MSM實現了session的綁定

Memcached + MSM 實現Tomcat Session保持

總結

本文主要介紹了通過MSM實現session server從而使客戶端能夠保持session, 總的來說還是很簡單的, 畢竟Memcached配置簡單, 但是要理解其中的原理還需要下一番功夫.

作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~ 
作者: AnyISaIln QQ: 1449472454 
感謝: MageEdu

原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/15232

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-22 15:44
下一篇 2016-04-24

相關推薦

  • 第十一周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 發送者:     1)使用單向加密算法提取要發送文件的特征碼;     2)使用自己的私鑰加密特征碼并附加在數據后面;     3)生成用于對稱加密的臨時密碼;     4)用此臨時密鑰加密數據和已經使用私鑰加密后的特征碼; &nb…

    2017-03-20
  • 為什么系統可執行文件多用相對路徑創建鏈接

    為什么系統可執行文件多用相對路徑創建鏈接 使用鏈接有什么好處 作為一個linux初學者,我們首先要知道,在linux中使用鏈接的好處是什么??偨Y下來一共有幾個: 使用鏈接可以使我們在訪問文件時省去一大筆敲文件路徑的時間。對于我們運維工程師來說,我們經常要查看某個文件或者訪問某個目錄,再進行該項工作時,往往需要敲很多路徑才能找到我們想訪問的文件,創建鏈接可以讓…

    Linux干貨 2017-07-23
  • Linux文件管理及bash腳本特性

    馬哥教育網絡班23期+第2周課程練習 Linux文件管理及bash腳本特性 概述,經過前三天的學習,想必我們已經對Linux 有了一個初步的了解,接下來這講我們要講述一下Linux至關重要的文件管理和bash腳本特性等知識要點 一、Linux 文件管理 1.1 原理概述   文件管理對于Linux系統來說至關重要,因為Linux 的哲學思想就是一切…

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

    1、創建一個10G分區,并格式為ext4文件系統(1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳 # fdisk /dev/sdb <<EOF> n> p> 1> &g…

    Linux干貨 2016-11-28
  • n28 第二周作業

    n28 第二周作業

    Linux干貨 2017-12-09
  • 集中練習7-bash腳本

    集中練習7-bash腳本

    Linux干貨 2017-12-05

評論列表(1條)

欧美性久久久久