この記事の目的は、セッションレプリケーションを持つ基本的なTomcatクラスタを設定することです。 真のセッションレプリケーションを行うには、 ノードへのトラフィックをリダイレクトするロードバランサーが必要です。 この記事では、ロードバランサーの設定方法については説明しません。 ロードバランサーの設定方法については、ベンダーのドキュメントを参照してください(例:Apache.)
また、クラスタリングに必要な分散キャッシングやインデックスレプリケーションについては、本稿では触れません。 記事をご参照ください。 クラスタ環境での Liferay DXP のインストールを参照してください。
すべてのノードが同じ時刻を持ち、 Network Time Protocol (NTP) サービスで同期していることを確認します。
注意:Tomcatでセッションレプリケーションを実現する方法はこれだけではありません。 memcached のような他の方法も利用可能です。
解像度
以下の手順で、適切なセットアップ手順を説明します。
-
${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で設定します。 - 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> -
${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.のように、適切な値で追加のエントリを作成します。 - 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 の支援は限定的です。
- 2番目のノードと他のすべてのノードについて、この手順を繰り返します。 同じデータベース接続 を設定し、すべてのノードが同じデータベースを指すようにします。 データベースの選択はユーザー次第であり、Liferayサポートはこの件に関して基本的な支援しかできません。
- サーバーを順次起動する。 クラスタノードは、どのノードがマスターノードであるかを決定する処理に時間がかかるため、同時に起動することはできません。
- ロードバランサー・ウェブサーバーを起動します。
- WebサーバーのIPアドレスまたはドメイン名へアクセスします。 Webサーバーは、リクエストを1つのノードにリダイレクトします。 ページ、ユーザー、アセットを作成します。
- 1つのノードをシャットダウンする。 トラフィックが自動的に2番目のノードにリダイレクトされ、ページ、ユーザー、およびアセットが2番目のノードに表示されることを確認します。
メモ
- セッションの状態はクッキーで追跡されるため、外部から同じように見えるURLでなければ、新しいセッションが作成されることになります。
- すべてのセッション属性は
java.io.Serializableを実装する必要があります。 - カスタムクラスターバルブが定義されている場合は、 ReplicationValve が
server.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要素に追加するだけです。