若是爲了簡單使用,你只須要安裝一個tomcat(6或者7)和memcached,在生產環境中可能會有多臺tomcat服務器以及多臺可用的memcached節點,並安裝在不一樣的機器上,咱們能夠使用黏性session(sticky sessions)或者非黏性session(non-sticky sessions),memcached-session-manager (msm) 對這兩種操做模式都支持。 javascript
下面給出一個黏性session模式的設置示例,此實例中安裝了2個tomcat以及2個memcached。 css
Tomcat-1(t1)的首要選擇是把session存儲在memcached-2 (m2)上(m2是t1的一個普通節點),而m2是運行在另外的一臺機器上。只有當m2不可用(宕機或沒法訪問)時,t1纔會把session存儲到memcached-1(m1,m1是t1的故障轉移節點)上。使用這種配置,即便機器1宕機了session也不會丟失。具體以下圖所示: java
咱們如何設置才能實現呢? web
從1.1版開始,MSM就提供了多種可選的session序列化策略,默認的策略是使用java進行序列化,這種實現已經集成在memcached-session-manager.jar包中了,其它的策略則能夠經過不一樣的jar包來提供實現。在下面的章節中,咱們能夠了解到每種策略所須要的jar包具體有哪些。 正則表達式
關於tomcat的配置主要包括兩個方面,首先須要下載所須要的包,放到tomcat安裝目錄下的lib目錄下(嚴格來講應該是$CATALINA_HOME/lib/)以及咱們應用的WEB-INF/lib/ 目錄下,同時還須要修改$CATALINA_HOME/conf/context.xml文件,並在<Context>元素中添加memcached session管理的配置信息。 json
無論你選擇哪一種序列化策略,你都須要 memcached-session-manager-${version}.jar ,若是你使用的是tomcat6,則還須要下載 memcached-session-manager-tc6-${version}.jar ,若是使用的是tomcat7則下載 memcached-session-manager-tc7-${version}.jar 。同時還須要下載 spymemcached-2.7.3.jar.下載這完這些jar包後把jar包放到 $CATALINA_HOME/lib/目錄。 tomcat
若是隻是使用java序列化的話,那麼須要的jar包就是以上所列出的那些了,可是若是想使用自定義的序列化策略(一般性能會更佳),咱們還須要下載相應的jar包並放到咱們webapp下的WEB-INF/lib/目錄中。 服務器
若是你的應用使用了maven來進行jar包管理,那麼你只須要在pom.xml中加入相應的序列化策略依賴定義就能夠了,具體的maven依賴定義以下(任選一種就oK了): session
kryo-serializer: app
javolution:
xstream:
flexjson:
若是咱們不是使用maven倉庫來對依賴進行管理的話 ,咱們須要針對每種策略下載單獨須要的jar包,具體以下:
處理完jar包以後,咱們還須要修改 $CATALINA_HOME/conf/context.xml文件中Context節點下的內容,添加memcached-session-manager配置。
下面將會講解關於tomcat配置的具體的示例,主要包括使用memcached來管理黏性session和非黏性session以及使用membase來管理非黏性session。示例基於的前提是假設咱們有2個memcached實例,一個運行在host1主機,另外一個運行在host2主機,示例使用的序列化方式爲kryo。
下面咱們給出tomcat1的配置,假設tomcat1和memcached節點n1都是運行在host1主機上,其中屬性failoverNodes="n1"的做用是告訴msm最好是把session保存在memcached "n2"節點上,只有在n2節點不可用的狀況下才把session保存在n1節點。這樣即便host1主機宕機,仍然能夠經過host2上的tomcat2訪問存放在memcached "n2" 節點中的session。
tomcat1 configuration:
以上就是tomcat1的配置信息,對於tomcat2,咱們只須要修改一下failoverNodes屬性的值爲"n2" ,這樣tomcat2就會優先把session存放到memcached "n1"節點,其他配置信息都同樣。
下面演示一個非黏性session管理的配置示例,對於非黏性的session管理,咱們不須要配置failoverNodes屬性,由於全部sessions在tomcat集羣中是循環可見的,並不會綁定到某一個單獨的tomcat,對於非黏性session管理,集羣中的全部tomcat都是用同一個配置,具體信息以下:
若是是使用membase來對session進行管理,那麼則某一個節點的配置以下:
在context.xml中配置完msm以後, 咱們就能夠啓動咱們的應用程序了,這樣全部的session將會根據系統配置存儲到指定的memcached節點或者membase中。
className (required)
類名:de.javakaffee.web.msm.MemcachedBackupSessionManager
memcachedNodes (required)
memcached節點:此屬性應該包含全部運行的memcached節點或者membase bucket的uri地址,每個memcached節點的屬性定義格式爲<id>:<host>:<port>,多個節點定義直接使用空格或者逗號分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",若是隻有單個的memcached節點,則<id>是可選項,只需配置<host>:<port>便可,形如:memcachedNodes="localhost:11211"。
若是咱們配置的是membase,那麼從1.6.0版本開始,咱們能夠配置指定一個或者多個membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名稱和密碼經過屬性username,password來定義。membase buckets鏈接須要遵循memcached協議,傳輸數據經過二進制流方式。
failoverNodes (optional, must not be used for non-sticky sessions)
故障轉移節點:可選項,對非黏性session不可用,屬性必須包含memcached節點集羣的全部ids。節點id之間用空格或者逗號分隔。
username (since 1.6.0, optional)
從1.6.0版開始使用,而且是可選的。用來進行membase bucket或者SASL驗證。
password (since 1.6.0, optional)
從1.6.0版開始使用,而且是可選的。用來進行membase bucket或者SASL驗證,密碼能夠爲空。
memcachedProtocol (since 1.3, optional, default text)
定義memcached協議,默認使用text文本
sticky (since 1.4.0, optional, default true)
定義session方式爲黏性或非黏性,默認爲true
lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)
只有非黏性session才使用,默認值爲none
requestUriIgnorePattern (optional)
sessionBackupAsync (optional, default true)
backupThreadCount (since 1.3, optional, default number-of-cpu-cores)
sessionBackupTimeout (optional, default 100)
operationTimeout (since 1.6.0, optional, default 1000)
sessionAttributeFilter (since 1.5.0, optional)
transcoderFactoryClass (since 1.1, optional, default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)
序列化接口實現:
copyCollectionsForSerialization (since 1.1, optional, default false)
customConverter (since 1.2, optional)
enableStatistics (since 1.2, optional, default true)
enabled (since 1.4.0, optional, default true)