https://github.com/magro/memcached-session-manager/wiki/SerializationStrategies css
MSM的特性: 前端
a、支持tomcat 6,tomcat 7,tomcat 八、tomcat9 java
b、支持sticky session或no-sticky session git
c、無單點故障 github
d、tomcat故障轉移 web
e、memcached故障轉移 json
f、附帶串行化插件 後端
g、支持異步session存儲,擁有更快的性能 瀏覽器
sticky sessions粘性會話: tomcat
安裝了MSM的tomcat會優先使用本機內存保存session,當一個請求結束後,MSM會把session發送到memcached節點上存放以做備份,第二次請求時,若是本地有session就直接返回,第二次請求結束,把session修改後的信息更新到後端的memcached服務器,以這樣的方式來保持本地的session與memcached上的session同步。當這個tomcat節點宕機時,那麼用戶的下一次請求就會被前端的負載均衡器路由到另外一個tomcat節點上,而這個節點上並無這個用戶的session信息,這個節點就從memcached服務器上去讀取session,並把session保存到本地的內存,當請求結束,session又被修改,再送回到memcached進行存放備份
當後端配置了多臺memcached時,MSM在更新session信息時會同時向多個memcached節點更新session,當一個memcached節點故障時,tomcat能夠從選擇一個正常工做的memcached節點讀取session信息來發送給用戶的瀏覽器,讓其重置session信息,這樣,memcached也達到了高可用的目的
non-sticky session非粘性會話:
tomcat session爲中轉session, 假設memcached1爲主session ,memcached2 爲備session。Request請求到來時,從memcached2加載備session到tomcat,若是memcached2沒有就從memcached1上讀取session,若是memcached1也沒有就讀取本地session,若是沒有本地session就在本地建立,當請求結束時,將本地的session更新至memcached1和memcached2上,而且清除本地的session
配置
將jar包拷貝到tomcat的lib目錄下
修改context.xml文件(文件位置TOMCAT_HOME/conf/context.xml)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
/>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="memcached1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory"
/>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.json.JSONTranscoderFactory"
/>