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

この記事の目的は、セッションレプリケーションを持つ基本的なTomcatクラスタを設定することです。 真のセッションレプリケーションのためには、 にトラフィックをノードにリダイレクトするロードバランサー がなければなりません。 この記事では、ロードバランサーの設定方法については触れていません。 ロードバランサの設定方法については、ベンダーのドキュメント(Apache など)を参照してください。

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

すべてのノードが同じ時刻であることを確認し、 ネットワークタイムプロトコル (NTP)サービスと同期してください。

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

決議

以下の手順で、適切な設定プロトコルをご案内します。

  1. ${TOMCAT_HOME}/conf/server.xml で、 jvmRoute の値を Engine セクションに追加します。

    こんな感じになります。

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

    明確にするために、 worker1 は、それに割り当てられた名前であり、任意の英数字の値にすることができます。 [a-z][A-Z][0-9][_\-]

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

  2. <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などのように、適切な値を持つ追加のエントリを作成します。

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

    注意: 2 番目のプロパティは、AUI ボタンのようなものが Apache サーバで機能するようにします。 3つ目のプロパティでは、ノードIDをフッターとして可視化します。 この2つのプロパティは、セッションレプリケーションとは独立しています。 セッションレプリケーション設定をさらに行う場合のLiferayサポートのサポートは制限されています。

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

注意事項

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

追加情報

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています