2014年5月22日

ElastiCache で tomcat の session を管理する

以前、DynamoDB で tomcat の session を管理するというメモを書きましたが、今回は ElastiCache で管理してみます。
使うのは memcached-session-manager です。

Setup はこちらの wiki に従います。

まず、$CATALINA_HOME/lib/ に以下のライブラリを格納します。
memcached-session-manager-${version}.jar
memcached-session-manager-tc7-${version}.jar
AmazonElastiCacheClusterClient-no-version.jar

次に WEB-INF/lib/ に kryo-serializer のライブラリを格納します。
こちらは maven で pom.xml に含めておくことで、war ファイル作成時に自動的に導入されます。
<dependency>
    <groupId>de.javakaffee.msm</groupId>
    <artifactId>msm-kryo-serializer</artifactId>
    <version>1.8.1</version>
    <scope>runtime</scope>
</dependency>


META-INF/context.xml を設定します。
ElastiCache の設定の仕方はこちらにあります。
memcachedNodes に ElastiCache の Configuration Endpoint を設定すればOKです。
今回はこのように sticky、copyCollectionsForSerialization を false にしてみました。
<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="session.xxxx.cfg.use1.cache.amazonaws.com:11211"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    sessionBackupAsync="false"
    sticky="false"
    copyCollectionsForSerialization="false"
  />
</Context>

"It should work with non sticky sessions as well but has not yet been tested" とありましたが ELB 配下に複数配置して、ELB の Sticky を無効にした場合でも、振り分けられたインスタンスに関係なく値を取ることができました。
試してはいませんが、Auto Scaling などでインスタンスが停止した場合でも、ほかのインスタンスでセッションを引き継げるかもしれないですね!

もう少しドキュメントやソースを確認して DynamoDB Session の場合と比較してみたいです。

0 コメント:

コメントを投稿