2

Tomcat のコンテキストで、スティッキー セッションを有効にせずにセッション レプリケーションを実行できますか?

スティッキー セッションの目的は、クライアントをセッション全体で 1 つのサーバーに「固定」することだと理解しています。セッション レプリケーションを使用すると、クライアントとサーバーのやり取りがクラスター全体 (多数の Web サーバー) に複製されます。

上記の場合、セッションのレプリケーションは実行できますか? つまり、クライアントのセッションは Web サーバー全体に分散され、任意の 1 つの Web サーバーとの各対話がレプリケートされるため、シームレスな対話が可能になります。

4

3 に答える 3

2

私の知る限り、Tomcat クラスタリングは非スティッキー セッションをサポートしていません。tomcat ドキュメントから:

ロードバランサーがスティッキー セッション モード用に構成されていることを確認してください。

しかし、非スティッキー セッションもサポートするmemcached-session-manager (msm)と呼ばれるソリューション (私が作成したので、私が偏っていることがわかります :-))があります。msm は、セッションのバックアップ/ストレージのバックエンドとしてmemcached (または memcached プロトコルを使用するバックエンド) を使用します。

非スティッキー モードでは、セッションは memcached にのみ保存され、Tomcat には保存されなくなります。非スティッキー セッションと同様に、セッション ストアは外部にある必要があります (古いデータを避けるため)。

また、セッションのロックもサポートしています。スティッキーでないセッションでは、複数の並列リクエストが異なる tomcat にヒットし、セッションを並行して変更する可能性があるため、セッションの変更の一部が他の変更によって上書きされる可能性があります。セッションのロックにより、異なる tomcat に送信される並列リクエストの同期が可能になります。

msmのホームページでは、主にスティッキー セッション アプローチについて説明しています (これだけで始まったため)。非スティッキー セッションの詳細については、検索するか、メーリング リストで質問してください。

構成に関する詳細と例は、msm wiki (SetupAndConfiguration)にあります。

複雑さに関するアイデアを提供するために: 必要なのは、実行中の 1 つ以上のmemcachedサーバー (または同様に言えば memcached) と、次のような更新された tomcat context.xml です。

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1.domain.com:11211,n2:host2.domain.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="auto"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    />
</Context>

ロードバランサーには特別な構成は必要ないため、これらの設定が整ったら、アプリケーションのテストを開始できます。

于 2012-02-20T12:04:00.483 に答える
0

このトピックに関する優れた記事は次のとおりです。

彼らが言及しているテラコッタ製品には、ここに簡単なチュートリアルがあります。

TerracottaはTomcatで動作しますが、Terracottaのどのビットが無料で、どのビットが商用であるかを確認するために注意を払う必要があります。数年前、彼らの冗長な店は支払われました、そして私はこの解決策が別の製品であったことを覚えていません。

于 2012-02-20T14:18:30.413 に答える
0

私は実際にこの質問の逆を見つけました。OOTB オプションを使用したセッション レプリケーション (Tomcat7) は、スティッキー セッションなしでのみ正しく機能します。ロギングを有効にした後、JVMRoutes を有効にすると、セッション ID が A123456789 から A123456789.01 になり、末尾に jvmroute が付いていることがわかりました。そのセッションはクラスター内のノード 01 からノード 02 に正常に複製されますが、同じ ID (A123456789.01) を使用します。ノード 01 をクラスターから外すと、トラフィックがノード 02 に留まり始めます。そして、もちろん存在しないセッション A123456789.02 を探します。.01 は存在しますが、基本的に有効期限が切れるまでアイドル状態になります。他のサーバーを起動し、セッションが複製されてから 02 を停止すると、中断したところからセッションが再開されるため、さらに奇妙な動作になります。

私にとって、これまでのところ、スティッキー セッションのないセッション レプリケーション (クラスタ内のノード間での通常の RR のみ) だけが機能しています。

于 2014-07-17T14:58:14.820 に答える