日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用memcached-session-manager实现Tomcat集群

發(fā)布時(shí)間:2025/3/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用memcached-session-manager实现Tomcat集群 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:本篇文章是根據(jù)memcached-session-manager官方配置方法wiki頁(yè)面翻譯整理,關(guān)于memcached-session-manager的介紹,具體參見官網(wǎng):http://code.google.com/p/memcached-session-manager/,也可以參考:http://gong1208.iteye.com/blog/1596120

?

Introduction

如果為了簡(jiǎn)單使用,你只需要安裝一個(gè)tomcat(6或者7)和memcached,在生產(chǎn)環(huán)境中可能會(huì)有多臺(tái)tomcat服務(wù)器以及多臺(tái)可用的memcached節(jié)點(diǎn),并安裝在不同的機(jī)器上,我們可以使用黏性session(sticky sessions)或者非黏性session(non-sticky sessions),memcached-session-manager (msm)?對(duì)這兩種操作模式都支持。

下面給出一個(gè)黏性session模式的設(shè)置示例,此實(shí)例中安裝了2個(gè)tomcat以及2個(gè)memcached。

Tomcat-1(t1)的首要選擇是把session存儲(chǔ)在memcached-2 (m2)上(m2是t1的一個(gè)普通節(jié)點(diǎn)),而m2是運(yùn)行在另外的一臺(tái)機(jī)器上。只有當(dāng)m2不可用(宕機(jī)或無法訪問)時(shí),t1才會(huì)把session存儲(chǔ)到memcached-1(m1,m1是t1的故障轉(zhuǎn)移節(jié)點(diǎn))上。使用這種配置,即使機(jī)器1宕機(jī)了session也不會(huì)丟失。具體如下圖所示:

我們?nèi)绾卧O(shè)置才能實(shí)現(xiàn)呢?

?

Decide which serialization strategy to use

從1.1版開始,MSM就提供了多種可選的session序列化策略,默認(rèn)的策略是使用java進(jìn)行序列化,這種實(shí)現(xiàn)已經(jīng)集成在memcached-session-manager.jar包中了,其它的策略則可以通過不同的jar包來提供實(shí)現(xiàn)。在下面的章節(jié)中,我們可以了解到每種策略所需要的jar包具體有哪些。

?

Configure tomcat

關(guān)于tomcat的配置主要包括兩個(gè)方面,首先需要下載所需要的包,放到tomcat安裝目錄下的lib目錄下(嚴(yán)格來說應(yīng)該是$CATALINA_HOME/lib/)以及我們應(yīng)用的WEB-INF/lib/?目錄下,同時(shí)還需要修改$CATALINA_HOME/conf/context.xml文件,并在<Context>元素中添加memcached session管理的配置信息。

?

Add memcached-session-manager jars to tomcat

不管你選擇哪種序列化策略,你都需要?memcached-session-manager-${version}.jar?,如果你使用的是tomcat6,則還需要下載?memcached-session-manager-tc6-${version}.jar?,如果使用的是tomcat7則下載?memcached-session-manager-tc7-${version}.jar?。同時(shí)還需要下載?spymemcached-2.7.3.jar.下載這完這些jar包后把jar包放到?$CATALINA_HOME/lib/目錄

?

Add custom serializers to your webapp (optional)

如果只是使用java序列化的話,那么需要的jar包就是以上所列出的那些了,但是如果想使用自定義的序列化策略(通常性能會(huì)更佳),我們還需要下載相應(yīng)的jar包并放到我們webapp下的WEB-INF/lib/目錄中。

如果你的應(yīng)用使用了maven來進(jìn)行jar包管理,那么你只需要在pom.xml中加入相應(yīng)的序列化策略依賴定義就可以了,具體的maven依賴定義如下(任選一種就oK了):

kryo-serializer:

Xml代碼??
  • <dependency>??
  • ????<groupId>de.javakaffee.msm</groupId>??
  • ????<artifactId>msm-kryo-serializer</artifactId>??
  • ????<version>1.6.0</version>??
  • ????<scope>runtime</scope>??
  • </dependency>??
  • javolution:

    Xml代碼??
  • <dependency>??
  • ????<groupId>de.javakaffee.msm</groupId>??
  • ????<artifactId>msm-javolution-serializer</artifactId>??
  • ????<version>1.6.0</version>??
  • ????<scope>runtime</scope>??
  • </dependency>??
  • xstream:

    Xml代碼??
  • <dependency>??
  • ????<groupId>de.javakaffee.msm</groupId>??
  • ????<artifactId>msm-xstream-serializer</artifactId>??
  • ????<version>1.6.0</version>??
  • ????<scope>runtime</scope>??
  • </dependency>??
  • flexjson:

    Xml代碼??
  • <dependency>??
  • ????<groupId>de.javakaffee.msm</groupId>??
  • ????<artifactId>msm-flexjson-serializer</artifactId>??
  • ????<version>1.6.0</version>??
  • ????<scope>runtime</scope>??
  • </dependency>??
  • ?

    如果我們不是使用maven倉(cāng)庫(kù)來對(duì)依賴進(jìn)行管理的話 ,我們需要針對(duì)每種策略下載單獨(dú)需要的jar包,具體如下:

    • 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

    ?

    Configure memcached-session-manager as?<Context>?Manager

    處理完jar包之后,我們還需要修改?$CATALINA_HOME/conf/context.xml文件中Context節(jié)點(diǎn)下的內(nèi)容,添加memcached-session-manager配置。

    下面將會(huì)講解關(guān)于tomcat配置的具體的示例,主要包括使用memcached來管理黏性session和非黏性session以及使用membase來管理非黏性session。示例基于的前提是假設(shè)我們有2個(gè)memcached實(shí)例,一個(gè)運(yùn)行在host1主機(jī),另一個(gè)運(yùn)行在host2主機(jī),示例使用的序列化方式為kryo。

    下面我們給出tomcat1的配置,假設(shè)tomcat1和memcached節(jié)點(diǎn)n1都是運(yùn)行在host1主機(jī)上,其中屬性failoverNodes="n1"的作用是告訴msm最好是把session保存在memcached "n2"節(jié)點(diǎn)上,只有在n2節(jié)點(diǎn)不可用的情況下才把session保存在n1節(jié)點(diǎn)。這樣即使host1主機(jī)宕機(jī),仍然可以通過host2上的tomcat2訪問存放在memcached "n2"?節(jié)點(diǎn)中的session。

    tomcat1 configuration:

    Xml代碼??
  • <Context>??
  • ??...??
  • ??<Manager?className="de.javakaffee.web.msm.MemcachedBackupSessionManager"??
  • ????memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"??
  • ????failoverNodes="n1"??
  • ????requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"??
  • ????transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"??
  • ????/>??
  • </Context>??
  • 以上就是tomcat1的配置信息,對(duì)于tomcat2,我們只需要修改一下failoverNodes屬性的值為"n2" ,這樣tomcat2就會(huì)優(yōu)先把session存放到memcached "n1"節(jié)點(diǎn),其余配置信息都一樣。

    ?

    下面演示一個(gè)非黏性session管理的配置示例,對(duì)于非黏性的session管理,我們不需要配置failoverNodes屬性,因?yàn)樗衧essions在tomcat集群中是循環(huán)可見的,并不會(huì)綁定到某一個(gè)單獨(dú)的tomcat,對(duì)于非黏性session管理,集群中的所有tomcat都是用同一個(gè)配置,具體信息如下:

    Xml代碼??
  • <Context>??
  • ??...??
  • ??<Manager?className="de.javakaffee.web.msm.MemcachedBackupSessionManager"??
  • ????memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"??
  • ????sticky="false"??
  • ????sessionBackupAsync="false"??
  • ????lockingMode="uriPattern:/path1|/path2"??
  • ????requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"??
  • ????transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"??
  • ????/>??
  • </Context>??
  • 如果是使用membase來對(duì)session進(jìn)行管理,那么則某一個(gè)節(jié)點(diǎn)的配置如下:

    Xml代碼??
  • <Context>??
  • ??...??
  • ??<Manager?className="de.javakaffee.web.msm.MemcachedBackupSessionManager"??
  • ????memcachedNodes="http://host1.yourdomain.com:8091/pools"??
  • ????username="bucket1"??
  • ????password="topsecret"??
  • ????memcachedProtocol="binary"??
  • ????sticky="false"??
  • ????sessionBackupAsync="false"??
  • ????requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"??
  • ????transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"??
  • ????/>??
  • </Context>??
  • 在context.xml中配置完msm之后,?我們就可以啟動(dòng)我們的應(yīng)用程序了,這樣所有的session將會(huì)根據(jù)系統(tǒng)配置存儲(chǔ)到指定的memcached節(jié)點(diǎn)或者membase中。

    ?

    Overview over memcached-session-manager configuration attributes

    className?(required)

    類名:de.javakaffee.web.msm.MemcachedBackupSessionManager

    ?

    memcachedNodes?(required)

    memcached節(jié)點(diǎn):此屬性應(yīng)該包含所有運(yùn)行的memcached節(jié)點(diǎn)或者membase bucket的uri地址,每一個(gè)memcached節(jié)點(diǎn)的屬性定義格式為<id>:<host>:<port>,多個(gè)節(jié)點(diǎn)定義直接使用空格或者逗號(hào)分隔,形如:memcachedNodes="n1:app01:11211,n2:app02:11211",如果只有單個(gè)的memcached節(jié)點(diǎn),則<id>是可選項(xiàng),只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"。

    如果我們配置的是membase,那么從1.6.0版本開始,我們可以配置指定一個(gè)或者多個(gè)membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket?名稱和密碼通過屬性u(píng)sername,password來定義。membase buckets連接需要遵循memcached協(xié)議,傳輸數(shù)據(jù)通過二進(jìn)制流方式。

    ?

    failoverNodes?(optional, must not be used for non-sticky sessions)

    故障轉(zhuǎn)移節(jié)點(diǎn):可選項(xiàng),對(duì)非黏性session不可用,屬性必須包含memcached節(jié)點(diǎn)集群的所有ids。節(jié)點(diǎn)id之間用空格或者逗號(hào)分隔。

    ?

    username?(since 1.6.0, optional)

    從1.6.0版開始使用,并且是可選的。用來進(jìn)行membase bucket或者SASL驗(yàn)證。

    ?

    password?(since 1.6.0, optional)

    從1.6.0版開始使用,并且是可選的。用來進(jìn)行membase bucket或者SASL驗(yàn)證,密碼可以為空。

    ?

    memcachedProtocol?(since 1.3, optional, default?text)

    定義memcached協(xié)議,默認(rèn)使用text文本

    ?

    sticky?(since 1.4.0, optional, default?true)

    定義session方式為黏性或非黏性,默認(rèn)為true

    ?

    lockingMode?(since 1.4.0, optional, for non-sticky sessions only, default?none)

    只有非黏性session才使用,默認(rèn)值為none

    • none: 從不對(duì)session進(jìn)行鎖定
    • all: session將一直被鎖定,直到請(qǐng)求結(jié)束
    • auto: 對(duì)于只讀請(qǐng)求,session將不會(huì)被鎖定,如果是非只讀請(qǐng)求,則session會(huì)被鎖定
    • uriPattern:<regexp>: 通過正則表達(dá)式的方式來對(duì)請(qǐng)求uri以及查詢字符串進(jìn)行匹配,只有匹配上的才會(huì)被鎖定。

    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)

    序列化接口實(shí)現(xiàn):

    • Java serialization:?de.javakaffee.web.msm.JavaSerializationTranscoderFactory
    • Kryo?based serialization:?de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
    • Javolution based serialization:?de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory
    • XStream based serialization:?de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory

    ?

    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)

    總結(jié)

    以上是生活随笔為你收集整理的用memcached-session-manager实现Tomcat集群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。