使うのは 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 コメント:
コメントを投稿