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

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

written-by

Liferay Support

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 Portal のインストールの記事をご参照ください。

すべてのノードが同じ時刻であることを確認し、 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"/>
	<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.MessageDispatch15Interceptor"/>
	</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.JvmRouteSessionIDBinderListener"/>
	<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
	</Cluster>

3. ${TOMCAT_HOME}/webapps/ROOT/WEB-INF/web.xml <distributable /> タグを <webapps> タグの中に追加する。

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

5. Liferay バンドルの portal-ext.properties ファイルに、以下を追加します:

	redirect.url.security.mode=domain
	web.server.display.node=true

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

6. 2番目のノードと他のすべてのノードについて、この手順を繰り返します。 クラスタ設定portal-ext.propertiesで必ず定義してください ;すべてのノードが同じデータベースを指すように、同じデータベース接続を設定します。 データベースの選択はユーザー次第であり、Liferayはこの件に関して基本的な支援しかできません。

7. サーバーを順次起動する。 クラスタノードは、どのノードがマスターノードかを判断する処理に時間がかかるため、同時に起動することはできません。

8. ロードバランサーのWebサーバーを起動します。

9. Web サーバーの IP アドレスまたはドメイン名にアクセスします。 Webサーバーは、リクエストを1つのノードにリダイレクトします。 ページ、ユーザー、またはアセットを作成します。

10. 1つのノードをシャットダウンします。 トラフィックが2番目のノードに自動的にリダイレクトされ、ページ、ユーザー、アセットが2番目のノードに表示されることを確認します。

メモ

  • セッションの状態はクッキーによって追跡されるため、外部から同じように見えるURLでなければ、新しいセッションが作成されます。
  • すべてのセッション属性は java.io.Serializableを実装する必要があります。
  • カスタムクラスターバルブが定義されている場合、 ReplicationValveserver.xmlの Cluster 要素の下に同様に定義されていることを確認します。
  • ClusterモジュールはTomcatのJULIロギングフレームワークを使用しているので、ロギングは通常の logging.properties ファイルで設定することができます。 メッセージを追跡するには、キーでロギングを有効にします: org.apache.catalina.tribes.MESSAGES

追加情報

did-this-article-resolve-your-issue

legacy-knowledge-base