legacy-knowledge-base
公開されました Sep. 10, 2025

Liferay DXPでTomcatのセッションレプリケーションをセットアップする

written-by

Justin Choi

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

この記事の目的は、セッションレプリケーションを持つ基本的なTomcatクラスタを設定することです。 真のセッションレプリケーションを行うには、 ノードへのトラフィックをリダイレクトするロードバランサーが必要です。 この記事では、ロードバランサーの設定方法については説明しません。 ロードバランサーの設定方法については、ベンダーのドキュメントを参照してください(例:Apache.)

また、クラスタリングに必要な分散キャッシングやインデックスレプリケーションについては、本稿では触れません。 記事をご参照ください。 クラスタ環境での Liferay DXP のインストールを参照してください。

すべてのノードが同じ時刻を持ち、 Network Time Protocol (NTP) サービスで同期していることを確認します。

注意:Tomcatでセッションレプリケーションを実現する方法はこれだけではありません。 memcached のような他の方法も利用可能です。

解像度

以下の手順で、適切なセットアップ手順を説明します。

  1. ${TOMCAT_HOME}/conf/server.xml で、Engine セクションに jvmRoute の値を追加してください。

    このように表示されます。

     <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
    

    明確にするために、 worker1 は割り当てられた名前で、任意の英数字を使用できます。例えば [a-z][A-Z][0-9][_\-]

    Tomcatインスタンスが同じマシン上で動作している場合、 tcpListenPort 属性が各インスタンスで一意であることを確認します。 ほとんどの場合、Tomcatは賢いので、4000-4100の範囲で利用可能なポートを自動検出することにより、自分で解決することができます。 これは、 server.xmlで設定します。

  2. Engineの <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" /> を以下の行に置き換えてください。
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> 
    
    <Manager className="org.apache.catalina.ha.session.DeltaManager" 
    expireSessionsOnShutdown="false"
    notifyListenersOnReplication="true"/>
    <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService"
    address="228.0.0.4"
    port="45564"
    frequency="500"
    dropTime="3000"/>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
    address="auto"
    port="4000"
    autoBind="100"
    selectorTimeout="5000"
    maxThreads="6"/>
    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
    <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
    tempDir="/tmp/war-temp/"
    deployDir="/tmp/war-deploy/"
    watchDir="/tmp/war-listen/"
    watchEnabled="false"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
  3. ${APACHE_HOME}/conf/workers.propertiesで、ワーカーの情報を追加します。

    このように表示されるはずです。

     worker.list=balancer
      worker.worker1.port=8009
    
      worker.worker1.host=${WORKER1_IP_ADDRESS/DOMAIN}
      
      worker.worker1.type=ajp13
      worker.worker1.lbfactor=1
      
      worker.worker2.port=8009
    
      worker.worker2.host=${WORKER2_IP_ADDRESS/DOMAIN}
      worker.worker2.type=ajp13
      worker.worker2.lbfactor=1
      
      worker.balancer.type=lb
    
      worker.balancer.balance_workers=worker1,worker2
    
      worker.loadbalancer.sticky_session=1
    
      worker.balancer.method=B
    

    名前に worker1 が使われていることに注意してください。 これは、最初のステップで設定した jvmRoute の値と同じです。 前述のとおり、この値には任意の英数字を指定することができます。 しかし、設定全体を通じて一貫性を保つ必要があります。.

    2つ以上のノードがある場合は、 worker3, worker4, etc.のように、適切な値で追加のエントリを作成します。

  4. Liferay バンドルの portal-ext.properties ファイルに、以下を追加します。
     
      cluster.link.enabled=true
      redirect.url.security.mode=domain
      web.server.display.node=true
    

    注意:2つ目のプロパティは、AUIボタンなどをApache Serverで機能させるためのものです。 3つ目のプロパティは、ノードIDをフッターとして表示するようにします。 この2つの特性は、セッションレプリケーションとは無関係です。 セッションレプリケーションの設定に関する Liferay Support の支援は限定的です。

  5. 2番目のノードと他のすべてのノードについて、この手順を繰り返します。 同じデータベース接続 を設定し、すべてのノードが同じデータベースを指すようにします。 データベースの選択はユーザー次第であり、Liferayサポートはこの件に関して基本的な支援しかできません。
  6. サーバーを順次起動する。 クラスタノードは、どのノードがマスターノードであるかを決定する処理に時間がかかるため、同時に起動することはできません。
  7. ロードバランサー・ウェブサーバーを起動します。
  8. WebサーバーのIPアドレスまたはドメイン名へアクセスします。 Webサーバーは、リクエストを1つのノードにリダイレクトします。 ページ、ユーザー、アセットを作成します。
  9. 1つのノードをシャットダウンする。 トラフィックが自動的に2番目のノードにリダイレクトされ、ページ、ユーザー、およびアセットが2番目のノードに表示されることを確認します。

メモ

  • セッションの状態はクッキーで追跡されるため、外部から同じように見えるURLでなければ、新しいセッションが作成されることになります。
  • すべてのセッション属性は java.io.Serializableを実装する必要があります。
  • カスタムクラスターバルブが定義されている場合は、 ReplicationValveserver.xmlの Cluster 要素の下にも定義されていることを確認してください。
  • ClusterモジュールはTomcatのJULIロギングフレームワークを使用しているので、ロギングは通常の logging.properties ファイルで設定することができます。 メッセージを追跡するには、キーでロギングを有効にします。 org.apache.catalina.tribes.MESSAGES
  • プロパティ <distributable /> は、Apache Tomcat 8.x 以降で非推奨となっています。 conf/web.xmlのManager要素に追加する必要はなくなりました。 WEB-INF/web.xmlのContext要素に追加するだけです。

追加情報

did-this-article-resolve-your-issue

legacy-knowledge-base