事件緣由:一個主項目“圖說美物”,另外一個子功能是品牌商的入駐功能,是跟主項目分開的項目,為了共享登錄的用戶信息,而實現session共享,兩個tomcat,一個tomcat6,一個tomcat7
web專案windows系統下實作session的共享
第一個步:
在兩個tomcat的context.xml這個檔案中配置如下程式碼:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:127.0.0.1:11211"lockingMode="auto"sticky="true"requestUriIorePattern=".*/gn.(ico|png|gif|jpg| css|j s)$"sessionBackupAsync="false"sessionBackupTimeout="100"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"copyCollectionsForSerialization="true"/>
第二步:
Tomcat6下新增的jar包:
tomcat7下新增的jar包:
PS:利用memcache來保存tomcat的session會話
寫此文的主要目的是修正一下,部分網路上有誤的地方。
前提條件:
1.memcached正常工作了
2、tomcat 正常運作了。
1.安裝方法及安裝包
javolution-5.4.3.1.jar
memcached-2.4.2.jar
memcached-session-manager-1.3.0.jar
msm-javolution-serializer-cglib-1.3.0.jar
msm-javolution-serializer-jodatime-1.3.0.jar
安裝方法: 將這幾個套件放到/usr/local/tomcat6.0/lib裡。
2、編輯tomcat的設定檔。
<這一點很重要,因為網路上大多數文章都是說修改server.xml裡設定;我試過但最終發現session的資訊沒有存入到memcache中,我意識到這可能是設定有問題。目前發現編輯context.xml這個文件,是可以立即將session丟入到memcache中的。 >
# vim /usr/local/tomcat6.0/conf/context.xml <Context> <!-- 在這個欄位下加入下列內容,在節點入請填入你的memcached伺服器ip及連接埠號碼--> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:10.254.41.197:11211" requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false" /> </Context>
3、如何測試?
我目前的測試方法是,透過apache的mod_jk來實現負載平衡(之前的文章裡有寫),並且啟用tomcat之間的會話複製。
這樣的結果就是,seesion ID會隨著每次使用者的提交而變換節點,但ID不變。
例如:
ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat2
下次提交就會變成: <節點切換了,但是ID不變>
ID CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat1
結合memcache的狀態: <我之前在會話沒有成功的丟到memcached這裡時,cmd_set 為0 >
# perl memcached-tool.pl 10.254.41.197:11211 stats
cmd_get 27
cmd_set 15
get_hits 12
# perl memcached-tool.pl 10.254.41.197:11211 stats
cmd_get 31
cmd_set 17
get_hits 14
我想通過以上的判斷,配置是成功的!