Tomcat+memcached+Nginx實現session共享

Tomcat+memcached+Nginx實現session共享


1.文檔簡要說明

2.文檔相關內容地址:

2.1相關軟件包及下載地址

官方網址:

MSMhttp://code.google.com/p/memcached-session-manager/

Memcachedhttp://memcached.org/

最新穩定包下載地址:

http://code.google.com/p/memcached-session-manager/downloads/list

2.2相關配置文件模板及地址

相關依賴的jar包可從此配置文件模板中的鏈接下載

http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

2.3相關文檔地址

Memcached安裝:\hdmusic\trunk\docs\系統部署\Memcached\Memcached安裝.doc

Tomcat安裝:\hdmusic\trunk\docs\系統部署\Tomcat\Tomcat+Jdk安裝.doc

Nginx安裝:\hdmusic\trunk\docs\系統部署\Nginx\nignx安裝.doc

Nginx+tomcat整合:\hdmusic\trunk\docs\系統部署\Nginx\Nginx+Tomcat實現負載均衡動靜分離.doc

3.文檔內容:

3.1原理介紹:

MSM(memcached-session-manager)支持tomcat6tomcat7,利用ValueTomcat閥)對Request進行跟蹤。Request請求到來時,從memcached加載sessionRequest請求結束時,將tomcat session更新至memcached,以達到session共享之目的,支持stickynon-sticky模式。

Sticky 模式:tomcat session sessionmemcached 爲備sessionRequest請求到來時,從memcached加載備session tomcat (僅當tomcat jvmroute發生變化時,否則直接取tomcat session)Request請求結束時,將tomcat session更新至memcached,以達到主備同步之目的。

Non-Sticky模式:tomcat session爲中轉sessionmemcached1爲主sessionmemcached 2 爲備sessionRequest請求到來時,從memcached 2加載備session tomcat,(當容器中還是沒有session 則從memcached1加載主session tomcat這種情況是隻有一個memcached節點,或者有memcached1出錯時),Request請求結束時,將tomcat session更新至主memcached1和備memcached2,並且清除tomcat session 。以達到主備同步之目的。

3.2下載msm的jar包,並將其放置tomcat的lib目錄下

tc6和tc7分別對應tomcat6和tomcat7,若需添加一個jar便可。

必須jar:memcached-session-manager-${version}.jar

memcached-session-manager-tc6-${version}.jar

memcached-session-manager-tc7-${version}.jar

spymemcached-2.7.3.jar

根據序列化選擇jar:kryo效率在高可用時效率最高,但併發量不大時比較一般。

kryo-serializer: msm-kryo-serializer, kryo-serializers, kryo, minlog, reflectasm, asm-3.2

javolution-serializer: msm-javolution-serializer, javolution-5.4.3.1

xstream-serializer: msm-xstream-serializer, xstream, xmlpull, xpp3_min

flexjson-serializer: msm-flexjson-serializer, flexjson

3.3流程圖

1.sticky

spacer.gif

2.non-sticky

spacer.gif


3.4修改tomcat/conf/context.xml文件,在<Context>添加如下內容:

配置內容及官方截圖如下:

sticky

#nano /usr/local/tomcatA/conf/context.xml

在< Context>< /Context>中加入以下內容

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:192.168.1.123:11211,n2:192.168.1.129:11211"

failoverNodes="n1"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

spacer.gif

non-sticky

<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:192.168.1.146:11211,n2:192.168.1.1145:11211,n3:192.168.1.146:11212"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

官方截圖:

spacer.gif


3.5配置解釋:

t1(m1): 192.168.1.145 t2(m2):192.168.1.146
t1配置n1:192.168.1.145:11211 n2:192.168.1.146:11211 
t2配置n1:192.168.1.146:11211 n2:192.168.1.145:11211
<t1><t2>
. \ / .
. X .
. / \ .
<m1>
<m2>

sticky:採用Sticky配置時,tomcat默認維持向n2的session訪問(建議不要把n2放在本機上,以防t1的機子宕機時tomcat等全部被關閉),當n2宕掉時,會轉而訪問n1的session。

non-sticky採用Non-sticky時,tomcat會分發請求,並不維持對同一個tomcat的訪問,而是通過輪詢的方式隨機訪問。即tomcat隨機對n1、n2的訪問,建議搭載成三個memcached,三臺機的session互爲備份,當其中一個memcached失效時一臺轉爲主要memcached,另外一臺依舊可以備份。



3.6測試(此處的jsp僅列出body內容,測試服務器145、146)

n1:192.168.1.146:11211,n2:192.168.1.145:11211,n3:192.168.1.146:11212

輸入內容:save.jsp

<body>

<FORM METHOD=POST ACTION="index.jsp">

What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20>

<P><INPUT TYPE=SUBMIT>

</FORM>

</body>

獲得sessionid:index.jsp

<body>

<%

String name = request.getParameter( "username" );

session.setAttribute( "theName", name );

%>

This is my JSP page. <br>

<%=session.getId()%>

<A HREF="next.jsp">Continue</A>

</body>

得到sessionid及session值: next.jsp

<body>

<%=session.getId()%><br>

Hello, <%= session.getAttribute("theName")%>

</body>

查看memcached是否啓動。

#ps –A|grep memcached

spacer.gifspacer.gif

Memcached未宕機時:

spacer.gif

spacer.gif

spacer.gif

可知145訪問的是n2的session,宕掉145的memcached,再次訪問next.jsp,訪問結果如下:

spacer.gif

spacer.gif

如上圖所示,宕掉n2後,轉而訪問n3的session,得到session值依舊是123,再次宕掉n3,訪問截圖如下:

spacer.gif

宕掉n1:

spacer.gif

至此,所以session均被清空,重啓三臺memcached後,session值爲null。


3.7Memcached對web項目的要求

要求web項目需要序列化,否則,類似於後臺登陸系統會報未必序列化錯誤。


3.8Nginx+memcached+tomcat實現session共享

剩餘步驟中,只需實現nginx+tomcat的負載均衡和動靜分離便可,詳細請打開,此處不做詳細實現。

\hdmusic\trunk\docs\系統部署\Nginx\Nginx+Tomcat實現負載均衡動靜分離.doc


3.9待續

配置內容及相關命令在表格







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章