Memcached + MSM 實現Tomcat Session保持
前言
上篇文章我們實現了
session sticky
和session cluster
實現用戶session
的保持, 這篇文章主要介紹使用Memcached + MSM
來實現用戶session
的保持
Memcached介紹
Memcached
是一款免費、開源、分布式的內存對象緩存系統, 用于減少數據庫的負載, 加快web
應用程序的訪問.Memcached
簡單并且強大, 其簡單的設計加快了部署, 易于開發, 緩存解決了面臨的大量數據時很多的問題官方站點: http://memcached.org/
MSM介紹
MSM(memcached session manager)
, MSM是一款實現Tomcat
會話保持的管理組件, 支持粘性和無粘性的配置, 目前可以在Tomcat6,7,8中使用, 并且支持Memcached
會話故障轉移
實驗拓撲
實驗環境
由于我們虛擬機數量不夠, 所以Memcached
和Tomcat
運行在同一節點
主機 | 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 "%r" %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
訪問測試
安裝配置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
下面所有操作在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
的綁定
總結
本文主要介紹了通過
MSM
實現session server
從而使客戶端能夠保持session
, 總的來說還是很簡單的, 畢竟Memcached
配置簡單, 但是要理解其中的原理還需要下一番功夫.作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/15232
[…] 前言 […]