Tomcatによるセッションレプリケーション
Liferay DXP 2024.Q3+/ポータル GA92+
クラスタ内のすべてのインスタンス間でユーザーセッションデータが同期されるように、Liferay はセッションレプリケーションをサポートしています。 1 つのインスタンスに障害が発生しても、ユーザー セッションはクラスター内の他のノードに複製されるため、失われません。 Tomcat 上で DXP クラスターを使用している場合は、パフォーマンスを向上させるために、Liferay の DeltaManager の実装を使用できます。 これは、5 ノード以下のクラスターに推奨されます。
LiferayDeltaManager は Tomcat の DeltaManager を完全に置き換えます。 セッションのレプリケーションは、Liferay の実装を使用した場合にのみ可能です。
Liferay DXP 2025.Q3+/Portal GA146+にアップグレードする場合は、セッション永続性を手動で有効にする必要があります。 詳細については、 Apache のドキュメントを参照してください。
セッションレプリケーションの設定
-
Liferay Home の
conf/server.xml内の<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />を次の行に置き換えます。<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Manager className="com.liferay.support.tomcat.session.LiferayDeltaManager" /> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="300000" /> </Sender> </Channel> </Cluster> -
Liferay Home の
/webapps/ROOT/WEB-INF/web.xmlで、<webapps>内に<distributable />タグを追加します。 次のようになります。<web-app id="Liferay_Portal" metadata-complete="true" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <distributable /> <context-param> <param-name>axis.servicesPath</param-name> <param-value>/api/axis/</param-value> </context-param> -
portal-ext.propertiesファイルに、次のプロパティを追加します。portlet.session.replicate.enabled=true
デバッグ時に、Liferay Home の /webapps/ROOT/WEB-INF/classes/logging.propertiesにログを追加できます。
org.apache.catalina.ha.session.handlers=java.util.logging.ConsoleHandler
org.apache.catalina.ha.session.level=INFO
-
各ノードに対して手順 1 ~ 3 を繰り返します。 必ず
portal-ext.propertiesでクラスター設定を定義し、すべてのノードが同じデータベースを指すようにデータベース接続を設定してください。 -
サーバーを順番に起動します。 どのノードがマスター ノードであるかを決定するプロセスには時間がかかるため、クラスター ノードを同時に起動することはできません。
その他の最適化
セッションレプリケーションが機能するには、すべてのセッション属性が java.io.Serializableを実装する必要があります。 また、セッション レプリケーションは同じ URL 内のユーザー セッションにのみ適用されます。 これは、セッション状態がドメイン固有の Cookie によって追跡されるためです。 セッション レプリケーションの利点を最大限に活用するには、トラフィックをノードに送信するロード バランサーを使用することをお勧めします。
カスタム クラスター バルブを定義する場合は、 <Cluster> 要素で <ReplicationValve> も定義する必要があります。