クラスタリンクの構成
Cluster Linkを有効にすると、分散キャッシュがアクティブになります。 キャッシュは、同時に実行されている複数のLiferay DXPノードに分散されます。 Cluster Link は Ehcache レプリケーションを使用します。 Ehcache のグローバル設定は、 portal.properties ファイルにあります。
デフォルトでは、Liferayはノード間でキャッシュされたエンティティをコピーしません。 たとえば、エンティティが削除または変更された場合、クラスターリンクは他のノードに 削除 メッセージを送信して、ローカルキャッシュ内のこのエンティティを無効にします。 他のノードでそのエンティティを要求すると、キャッシュ ミスが発生し、エンティティはデータベースから取得されてローカルキャッシュに格納されます。 1つのノードのローカルキャッシュに追加されたエンティティは、他のノードのローカルキャッシュにはコピーされません。 エンティティがキャッシュされていないノードで新しいエンティティを取得しようとすると、キャッシュ ミス が発生します。 ミスにより、ノードがトリガーされてデータベースからエンティティが取得され、ローカルキャッシュに格納されます。

DXPのクラスタリングは、ネットワークとクラスタノードの場所に応じて、さまざまな方法で構成できます。 まず、クラスタリンクを有効にすることから始めます。
クラスタリンクの有効化
Cluster Link を有効にするには、次の ポータル プロパティ を portal-ext.properties ファイルに追加します。
cluster.link.enabled=true
クラスター リンク ポータル プロパティ では、ニーズに合わせて上書きできるデフォルト構成が提供されます。
デフォルトの多くは、実際のアドレスの代わりに localhost使用します。 ただし、一部の構成では、 localhost は、ホストの実際のアドレスではなく、内部ループバックネットワーク(127.0.0.1 または :: 1)にバインドされています。 それでもこの設定が必要な場合は、DXPにこのプロパティを使用して実際のアドレスを自動検出させることができます。
cluster.link.autodetect.address=www.google.com:80
サーバーから接続可能な他のホストに接続するように設定します。 デフォルトではGoogleを指しますが、サーバーがファイアウォールの背後にある場合は機能しない可能性があります。 各ホストの実際のアドレスを使用する場合は、自動検出アドレスを設定する必要はありません。
Cluster Link は JGroups に依存し、ノードが通信するための API を提供します。 以下のことが可能です:
- クラスター内のすべてのノードにメッセージを送信する
- 特定のノードにメッセージを送信する
- メソッドを呼び出し、すべて、一部、または特定のノードから値を取得する
- メンバーシップを検出し、ノードが参加または脱退したときに通知する
クラスタリンクには、ノード間の1対多タイプの通信を提供する拡張アルゴリズムが含まれています。 これはJGroupsのUDPマルチキャストでデフォルトで実装されていますが、ユニキャストとTCPも利用できます。
クラスタリンクの構成
Cluster Linkを有効にすると、DXPのデフォルトのクラスタリング構成が有効になります。 この設定では、UDP上のIPマルチキャストを定義します。 独自のノードでマルチキャストを使用できない場合(たとえば、地理的に離れている場合やファイアウォールによって分離されている場合)、代わりにユニキャスト実装を構成できます。 詳細については、 「TCP 経由のユニキャストの構成 」を参照してください。
UDPを介したマルチキャストの使用
DXP は、JGroups の チャネルの 2 つのグループ (制御グループとトランスポート グループ) を使用して、UDP 経由のマルチキャストを実装します。 チャネルプロパティをカスタマイズしたい場合は、次のポータルプロパティを portal-ext.propertiesに追加することでカスタマイズできます。
cluster.link.channel.name.control=[your control channel name]
cluster.link.channel.properties.control=[your control channel properties]
チャネルのプロパティについては、 JGroups のドキュメント を参照してください。 デフォルトの構成では、そこで説明されている設定を持つ多くのプロパティが設定されます。
マルチキャストは、ネットワーク上のすべてのデバイスにブロードキャストします。 同じネットワーク上のクラスター環境は、デフォルトで互いに通信します。 それらの間で送信されるメッセージと情報(たとえば、スケジュールされたタスク)は、意図しない結果につながる可能性があります。 このようなクラスター環境を分離するには、ネットワーク上でクラスター環境を論理的または物理的に分離するか、各クラスターの portal-ext.properties を設定して、異なるセットの マルチキャスト グループ アドレスとポート値を使用します。
JGroupsはデフォルトで localhost を使用してバインドアドレスを自動的に設定します。 ただし、一部の構成では、 localhost は、ホストの実際のアドレスではなく、内部ループバックネットワーク(127.0.0.1 または :: 1)にバインドされています。 DXPの cluster.link.autodetect.address ポータルプロパティが接続可能なサーバーを指している限り、DXPはそのサーバーを使用してホストの実際のアドレスを自動的に検出します。 デフォルトの設定は次のとおりです。
cluster.link.autodetect.address=www.google.com:80
サーバーがファイアウォールの内側にある場合、Googleへの連絡が機能しない場合があります。
バインドアドレスのホストアドレスを自動的に検出する代わりに、 portal-ext.properties ファイルでバインドアドレスを手動で設定できます。
-
cluster.link.autodetect.addressプロパティを空の値に設定して、アドレスの自動検出を無効にします。cluster.link.autodetect.address= -
次のプロパティをホストのIPアドレスに設定します。
cluster.link.bind.addr["cluster-link-control"]=[place your IP address or host name here] cluster.link.bind.addr["cluster-link-udp"]=[place your IP address or host name here]
ネットワーク構成によっては、TCP 経由のマルチキャストが使用できない場合があります。そのような状況の詳細については、 TCP 経由のユニキャストの構成 を参照してください。 これらのメソッドはすべてJGroupsによって提供されることに注意してください。
ノード通信のセキュリティ保護
Liferay には 3 つの認証オプションがあります。
jgroups/unsecure/udp_control.xmlおよびjgroups/unsecure/udp_transport.xmlはいかなる種類の暗号化も使用しません。jgroups/secure/md5/udp_control.xmlおよびjgroups/secure/md5/udp_transport.xmlは認証に MD5 を使用します。 これがデフォルト設定です。jgroups/secure/x509/udp_control.xmlおよびjgroups/secure/x509/udp_transport.xmlは認証に X509 証明書を使用します。 実稼働環境に推奨されます。
portal-ext.propertiesで使用するファイルを選択します。 独自のカスタム JGroups 構成を使用することもできます。 異なるタイプの暗号化を使用するノードは相互に通信できないため、クラスターの暗号化タイプを変更するには完全なメンテナンス シャットダウンが必要です。
cluster.link.channel.properties.control=[your control channel properties]
cluster.link.channel.properties.transport.0=[your transport channel properties]
MD5 の場合、以下のプロパティを使用して auth.value を選択できます。 デフォルト値は liferay-clusterです。 クラスター内のすべてのノードが同じ auth.value を持ち、互いのメッセージを復号化できることを確認します。
cluster.link.auth.value=[secret]
X509 の場合、次の追加プロパティが必要です。
cluster.link.auth.cert.alias=[certification's alias in the keystore]
cluster.link.auth.cert.password=[certification's password in the keystore]
cluster.link.auth.cipher.type=[algorithms to encrypt the message]
cluster.link.auth.keystore.password=[keystore password]
cluster.link.auth.keystore.path=[keystore location]
cluster.link.auth.keystore.type=[keystore type]
cluster.link.auth.value=[the string to encrypt]
安全でない環境のアップグレード
デフォルト構成を使用しており、 portal-cluster-multiple モジュールを、異なる暗号化オプションを許可するバージョンにアップグレードする場合は、アップグレード プロセス全体を通じてノードが相互に通信できることを確認する必要があります。 古いクラスターでは暗号化が一切使用されていない可能性があるため、新しいノードではデフォルトの MD5 認証を使用せず、代わりに jgroups/unsecure/udp_control.xml と jgroups/unsecure/udp_transport.xml を使用することが重要です。 すべてのノードがアップグレードされたら、暗号化タイプを変更するには、完全なメンテナンス シャットダウンを開始する必要があります。
さいごに
クラスターを構成したら、開始できます。 ログ ファイル メッセージにはクラスターの名前が表示されます (例: cluster=liferay-channel-control)。
-------------------------------------------------------------------
GMS: address=oz-52865, cluster=liferay-channel-control, physical address=192.168.1.10:50643
-------------------------------------------------------------------
クラスタはクラスタリンクを使用しています。
次のステップ
負荷をかけた状態でDXPクラスタをテストし、システムの最適化を調査するのが最善です。 サイトで最も使用されているエンティティを検討し、キャッシュ設定を適切に調整します。 キャッシュの設定方法については、 キャッシュ設定を参照してください。