12

Elastic Beanstalk を使用してデプロイされ、最低 2 つの EC2 マイクロ インスタンスで実行される Amazon Web Services で実行されている Web サイトを持っています。Web サイトのトラフィックに応じてスケールアップおよびスケールダウンできるように、自動スケーリング ポリシーが設定されています。この自動スケーリング ポリシーにより、スティッキー セッションの使用を避けたかったため、memcached-session-managerを使用しています。memcached サーバーに Amazon ElastiCache (スモール インスタンス) を使用しています。

context.xml の構成は次のとおりです。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="sessions.myinstancecode.0001.use1.cache.amazonaws.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="none"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

これは、トラフィックが少ない場合 (つまり、オンラインのユーザーが 10 人未満) は正常に機能しますが、EC2 インスタンスが再起動することがあります。Web サイトが現在 2 つのインスタンスで実行されていて、両方が同時に再起動することを決定した場合、Web サイトにアクセスできなくなり、大きな問題になることは想像に難くありません。これらは、EC2 インスタンスが再起動を決定する前に Amazon S3 でローテーションされる tail_catalina.log の最後の行です。

Jun 13, 2012 12:32:27 AM de.javakaffee.web.msm.BackupSessionTask handleException
WARNING: Could not store session 42F9761AC24F826E1FC3F2A834FBF442 in memcached.
Note that this session was relocated to this node because the original node was not available.
net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: sessions.myinstancecode.0001.use1.cache.amazonaws.com/10.194.23.99:11211
    at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:73)
    at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:230)
    at de.javakaffee.web.msm.BackupSessionTask.doBackupSession(BackupSessionTask.java:195)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:120)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:51)
    at de.javakaffee.web.msm.BackupSessionService$SynchronousExecutorService.submit(BackupSessionService.java:339)
    at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:198)
    at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:967)
    at de.javakaffee.web.msm.SessionTrackerValve.backupSession(SessionTrackerValve.java:226)
    at de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:128)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:680)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)
Jun 13, 2012 12:32:28 AM de.javakaffee.web.msm.LockingStrategy onAfterBackupSession
WARNING: An error occurred during onAfterBackupSession.
net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: sessions.myinstancecode.0001.use1.cache.amazonaws.com/10.194.23.99:11211
    at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:73)
    at de.javakaffee.web.msm.LockingStrategy.onAfterBackupSession(LockingStrategy.java:287)
    at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:970)
    at de.javakaffee.web.msm.SessionTrackerValve.backupSession(SessionTrackerValve.java:226)
    at de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:128)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:680)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)

Amazon ElastiCache ノードに障害が発生しているように見えますが、Amazon CloudWatch で確認すると、CPU 使用率が 8% を超えたことはありません。それほどストレスがかかっていないにもかかわらず、Amazon ElastiCache ノードが失敗する理由はありますか? また、Amazon ElastiChace ノードに障害が発生したときに、Amazon が再起動 (または、より良い方法: 新しいインスタンスを終了して開始) を決定するのはなぜですか?

どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

8

ドキュメントから、memcached-session-manager の sessionBackupTimeout を増やす必要があります。

sessionBackupTimeout (オプション、デフォルト 100)

セッションのバックアップが失敗したと見なされるまでのミリ秒単位のタイムアウト。このプロパティは、セッションが同期的に保存されている場合にのみ評価されます (sessionBackupAsync で設定)。デフォルト値は 100 ミリ秒です。

于 2012-06-13T13:51:02.690 に答える