用memcached实现session共享
用memcached實現session共享
一、簡介
1)Memcached簡介:
是一種高性能的分布式緩存服務器;
一般的使用目的是,通過“緩存數據” 查詢結果,減少數據訪問次數,以提高動態web應用的速度;
開源且垮平臺的。
memcached支持許多平臺:
Linux
FreeBSD
Solaris
Mac OS X
Windows
特點:通過增長因子解決存儲數據的空間浪費問題
只提供存儲數據的空間,數據存與取由客戶端自己完成
2)什么是session
客戶端從打開瀏覽器到關閉瀏覽器結束對網站的訪問的過程就稱為一個session
但http是一個無狀態的連接協議
session信息存儲在服務器端,保存用戶信息,用戶名,密碼等
cookies 信息是服務器下發給客戶端的,并保存咋客戶端的一個文件里,保存的內容主要包括:、SessionID、賬號名,過期時間,路徑和域
二、案列
?我們構建2臺memcached 服務,一臺做主,一臺做從,防止主down掉時,從服務器可以繼續工作;(192.168.1.40和192.168.1.50)
? 配置2臺web服務器,用tomcat做服務,使用java語言測試頁面(192.168.1.20和192.168.1.30)
? 配置一臺nginx代理服務器(192.168.1.1)
1、memcached服務器的搭建
1) ?memcached服務需要用到事件庫,要安裝事件庫libevent
#tar -zxvf libevent-2.0.15-stable.tar.gz
#cd libevent-2.0.15-stable
#./configure
#make && make install
這里用的是源碼包,安裝源碼包的軟件,源碼包安裝四部走,解壓--配置--編譯--安裝!
安裝完成后默認安裝目錄在/usr/local下,我們要把自己安裝的事件庫讓系統識別,用下面命令
#echo '/usr/local/lib'>/etc/ld.so.conf.d/libevent.conf
#ldconf//馬上生效,無需重啟
#ldconf -v |grep --color libevent
//檢查一下配置是否成功
2)安裝memcached
#tar -zxvf memcached-1.4.5.tar.gz
# cd memcached-1.4.5
#./configure
# make
#make install//同樣的源碼包安裝四步
安裝完memcached之后,會在/usr/local下的bin目錄下生成memcached的啟動腳本
#cd ?/usr/local/bin/
memcached的啟動參數:
-h 查看幫助信息
-p ? 指定memcached監聽的端口號 ?(默認11211)
-l ? ?memcached服務器的ip地址 ? ? (默認所有地址)
-u ? memcached程序運行時使用的用戶身份 必須 是root用戶
-m ?指定使用本機的多少物理內存 存數據 ?(默認64M)
-c ? ?memcached服務的最大鏈接數
-vvv 顯示詳細信息
-n ? chunk size 的最小空間是多少 單位 字節
-f ? ?chunk size大小增長的倍數 ?(默認 1.25倍)
-d ? 在后臺啟動
啟動memcached服務:
#usr/local/bin/memcached ? ?-u ?root ?-m 200M ?-c 200 ?-n ?10 ?-f ?2 ?-vvv ?-d
#netstat -utuanlp | grep :11211
//查看一下啟動狀態,默認端口11211
#pkill ?-9 ? memcached ?
//關閉服務用殺進程的方式
3)測試memcached
[root@localhost bin]# telnet localhost ?11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.//用telnet來測試,11211口
set age 0 ?180 ?2
10
STORED//出現這樣的字樣表示成功
get age
VALUE age 0 2
10
END
quit
Connection closed by foreign host.
參考第一臺memcached服務器的搭建過程,搭建另外一臺memcached服務器
2、部署tomcat網站服務器
1)安裝jdk ?(linux ?<----------> ?jdk ?<-------> ?tomcat)
?jdk= Java Development Kits,Java開發工具
用jdk-6u27-linux-i586包,實現linux與tomcat的“溝通”
---對應的包jdk-6u27-linux-i586.bin (tomcat運行環境包)
#chmod +x ?jdk-6u27-linux-i586.bin
#./jdk-6u27-linux-i586.bin ? ? //直接運行即可
#mv jdk1.6.0_27 ?/usr/local/jdk
#vim /etc/bashrc//定義環境變量
export ? ?JRE_HOME=/usr/local/jdk
export ? ?JAVA_BIN=/usr/local/jdk/bin
export ? ?PATH=$JRE_HOME/bin:$PATH
export ? ?CLASSPATH=.:$JRE_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar
export JRE_HOME ? JAVA_BIN ? PATH ? CLASSPATH
[root@www ~]# source ? /etc/bashrc
//初始化環境變量
驗證jdk:
#java -version
2)安裝tomcat
#tar -zxvf apache-tomcat-6.0.32.tar.gz ?-C /usr/local/
#mv apache-tomcat-6.0.32/ tomcat
目錄:
bin ? 服務啟動腳本
lib ? ? ?庫文件
logs ? ?日志文件
Work模塊配置文件目錄
conf ?tomcat配置文件目錄
webapps/ROOT ? ? ? 網頁目錄
啟動tomcat
#cd /usr/local/tomcat/bin/
[root@www bin]# ./startup.sh ? ? 啟動服務 腳本
#netstat -unalp | grep :8080 ?(tomcat 默認監聽8080端口)
[root@www bin]# ./shutdown.sh ?停止服務腳本
客戶端訪問
http://server_ip:8080
3)配置tomcat支持memcached
讓客戶端把session_id 保存到memcached服務上。
在tomcat上部署msm
安裝 連接memcached服務器的連接工具 ?(msm組件)
? 安裝完之后cd到session目錄下
#cd ?session
#cp ?*.jar ? /usr/local/tomcat/lib/
? ? ? ? ?//把所有以jar結尾的拷貝到tomcat的lib目錄下
編輯tomcat的配置文件,設置主從memcached服務器
#cd /usr/local/tomcat/conf/
#vim ? ?context.xml
<context>
? ? ? <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" ? memcachedNodes="memA:192.168.1.40:11211,memB:192.168.1.50:11211" ? failoverNodes="memB" ?REQUESTuRILGNOREpATTERN=".*\(ico|png|gif|jpg|css\)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</context>
以同樣的方式,部署另外一臺tomcat服務器;并且分別創建一個java測試頁,分別調用各自的sessionID的值,以作后面的檢測用,使效果更明顯
test.jsp
<html>
? ? ? ?<body bgcolor="green"> ?
? ? ? ? ? ?<center>
? ? ? ? ? ? ? ?<%= ?request.getSession().getId() ?%>
? ? ? ? ? ? ? ?<h1>192.168.1.101</h1>
? ? ? ? ? ?</center>
? ? ? ?</body>
</html>
可以在另外一臺tomcat服務器上把測試頁的背景顏色bgcolor="green"改一下,測試效果明顯
3)配置nginx反向代理:
把用戶訪問網站的請求以輪詢的方式分發給后端的2臺tomcat服務器。
#vim /usr/local/ngix/conf/nginx.conf
upstream sergrp{//定義源服務器組,名字可自由發揮
server 192.168.1.30:8080;
server 192.168.1.20:8080;
}
? ? ? ?http{
server {
server_name www.tarena.com;
location / {
... ...
proxy_pass http://sergrp;//調用前面定義的服務組
}
? }
}
4)測試
在客戶端瀏覽器上輸入代理服務器的ip地址,之后顯示后端的tomcat服務器的頁面,接著刷新一下,顯示的是另外一個后端tomcat服務器的頁面,兩張頁面的sessionID的值是相同的,代表部署成功!
思路:
1、nginx 反向代理 ((把用戶房費自己請求,分發給后臺的2臺tomcat服務器)
端口8080 ?
2、配置tomcat服務器:
192.168.1.30:8080;
192.168.1.20:8080;
3、部署2臺memcached服務
4、讓tomcat把sessionID存放到memcached里
沒配置之前,測試會發現session在變 服務器也在變
配置:
安裝連接工具,編寫配置文件,連接memcached服務器
context.xm(msm組件)
<context>
<manager ....
</context>
此時再測試,會發現session不變,服務器在變
轉載于:https://blog.51cto.com/xujpxm/1393084
總結
以上是生活随笔為你收集整理的用memcached实现session共享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: set row count
- 下一篇: Excel闪退问题解决办法