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 16:37

相關推薦

  • 常用linux命令小計(1)

    關于linux那些事兒—常用命令小結(1) 系統相關信息 Uname –m顯示處理器的架構 Uname –r顯示正在使用的內核版本 cat /proc/cpuinfo顯示cpu的具體信息 cat /proc/version顯示內核的版本 cat /proc/swaps顯示哪些分區被使用 data顯示系統日期 cal –y顯示當年的日歷 date 021920…

    Linux干貨 2017-02-19
  • 八.Linux博客-2016年8月8日sed、vim

    格式說明: 操作 概念 命令 說明及舉例 八.sed、vim sed 文本編輯工具 行編輯器,每次取出一行在內存里處理,處理完成后屏幕打印。完成后再取出一行放到內存里處理,覆蓋原來內存中的行,循環。。 sed -n '3d' f1 把文件f1中的第三行刪掉并不在屏幕上顯示 sed -n&n…

    Linux干貨 2016-08-24
  • 硬盤基礎知識及 MBR、GPT分區格式

    一,硬盤知識     硬盤接口類型:         ? 并行:             IDE: 133MB/s &n…

    Linux干貨 2016-09-19
  • 基于httpd服務實驗構建網站域名DNS解析

    具體組成簡圖 實驗前期準備 httpd的安裝 后期補充 做httpd 服務器的IP 為: 172.18.148.62 安裝DNS域名解析包 bind yum install bind 修改DNS 的基礎配置文件 /etc/named.conf   關閉所有的虛擬機的 防火墻 iptables -F CENTOS7 的系統關閉selinux sete…

    2017-04-16
  • 馬哥教育網絡第21期-第五周課程練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@6 ~]# grep '^[[:space:]]\+' /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白…

    Linux干貨 2016-08-15
  • 初窺門徑shell腳本

    1.什么是shell腳本    首先它是一個腳本,并不能作為正式的編程語言。因為是跑在linux的shell中,所以叫shell腳本。確切的說shell腳本就是一些命令的集合。 2.寫腳本前的一些細節及建議   Shell腳本通常都是以.sh 為后綴名的,這個并不是說不帶.sh這個腳本就不能執行,只是大家的一個習慣而已…

    Linux干貨 2016-08-12

評論列表(1條)

欧美性久久久久