LiferayポータルEEでの分散キャッシュの管理

Liferayサポートは、特定のサードパーティ製品を他の製品よりも推奨したり、推奨したりすることはありません。 Liferayは、これらの製品に関して、ここに記載されている指示や参照されている指示には一切責任を負いません。 これらの原則の実施は、すべて加入者の責任となります。

環境のニーズに応じて、Liferay Portalではキャッシュを実装する方法が2つあります。

  1. SingleVM Poolの略。キャッシュがLiferayの単一インスタンスに紐付けられている環境の場合。
  2. MultiVM Poolの略。クラスタ内の異なるノード間でキャッシュが分散されている環境向け。

この記事では、後者のオプションであるMultiVM分散キャッシングの構成オプションについて説明します。

内容

  1. 分散キャッシュの基本
    1. Liferay の分散キャッシュの仕組み
  2. 構成の概要
    1. 6.1 GA3と6.2
    2. 6.1 GA2 およびそれ以前のバージョン
  3. 特定の設定
    1. デフォルト(MPING UDP
    2. TCP トランスポート
      1. JDBC PING
      2. ティーシーピーピーピー
      3. S3 PING

影響を受ける製品

Liferayポータル6.0 EE SP2; 6.1.x EE; 6.2.x EE

決議

分散キャッシュの基本

分散キャッシュには、2つの明確で重要なステップが必要です。

ディスカバリー。 クラスタ化されたサーバ間で通信リンクを作成できるように、クラスタ内のメンバーの数を調べます。

トランスポート: キャッシュ変更イベントとキャッシュされたオブジェクトをサーバ間で送信します。

Liferayのデフォルトの分散キャッシュ実装はEhcacheです。 Ehcache は、いくつかのアルゴリズムのいずれかを使用するように設定することができます。

  1. アルゴリズム 1 (デフォルト)
    1. ディスカバリー: UDP/IPマルチキャスト
    2. トランスポート: RMI/TCP/IPユニキャスト
  2. アルゴリズム2(JGroups)。
    1. ディスカバリー: ユーザ選択可能
    2. トランスポート: ユーザ選択可能
      • アルゴリズム 2 は設定ファイルをキャッシュするために特別な設定を必要とすることに注意してください。

Liferay Enterprise Editionでは、レプリケーションのための3番目のより効率的なアルゴリズムがあります。 このアルゴリズムは、ディスカバリーとトランスポートの両方に LiferayのClusterLink層 を利用しています。 LiferayのClusterLinkは内部的にJGroupsを基盤技術に使用しています。

構成の概要

この概要では、Liferayの分散キャッシュを設定するための一般的な手順を作成しました。 より具体的な手順については、下記の「特定の設定」の見出しを参照してください。

I. Liferayポータル6.1 GA3と6.2

  1. 構成 portal-ext.properties ( Liferayユーザーガイドに準拠)
    • ehcache.cluster.link.replication.enabled=true
    • cluster.link.enabled=true
  2. ehcache-cluster-web.war をデプロイします。
    • マルチキャスト通信の場合は、これらの手順を踏むだけでOKです。 ただし、ユニキャストの場合は、手順3~5に進みます。
  3. 必要なJVMパラメータの追加
    • -Djgroups.bind_addr=<node_address>
    • -Djgroups.tcpping.initial_hosts=<node1address>[port1],<node2address>[port2]...
  4. ディスカバリープロトコルに基づいた設定ファイルの作成
    • これは、 CATALINA_BASE\webapps\ROOTWEB-INF\libjgroups.jar から tcp.xml ファイルを抽出し、目的の発見プロトコルに合わせて調整することで実現します。 相対パスを使用する場合は、 のtcp.xml がクラスパスにコピーされていることを確認してください(CATALINA_BASE\webapps\ROOTWEB-INFclasses)。
  5. Liferayを次のような設定ファイルにポイントします portal-ext.properties.
    • cluster.link.channel.properties.control=[CONFIG_FILE_PATH]/control_file.xml
    • cluster.link.channel.properties.transport.0=[CONFIG_FILE_PATH]/transport_file.xml

II. Liferayポータル6.1 GA2およびそれ以前のバージョン

  1. 構成 portal-ext.properties ( Liferayユーザーガイドに準拠)
    • ehcache.cluster.link.replication.enabled=true
    • cluster.link.enabled=true
  2. ehcache-cluster-web をデプロイします。
    • マルチキャスト通信の場合は、これらの手順を踏むだけでOKです。 ただし、ユニキャストの場合は、手順3~5に進みます。
  3. 必要なJVMパラメータを追加します。
    • -Djgroups.bind_addr=<node_IP_address>
    • -Djgroups.tcpping.initial_hosts=<node1address>[port1],<node2address>[port2]...
    • Liferay 6.1以下では、以前のJGroups-IPv6互換性のため、 -Djava.net.preferIPv4Stack=true を追加する必要があります。
  4. ディスカバリープロトコルに基づいた設定ファイルの作成
    • これは、 CATALINA_BASE\webapps\ROOTWEB-INF\libjgroups.jar から tcp.xml ファイルを抽出し、目的の発見プロトコルに合わせて調整することで実現します。 相対パスを使用する場合は、 のtcp.xml がクラスパスにコピーされていることを確認してください(CATALINA_BASE\webapps\ROOTWEB-INFclasses)。
  5. 以下の portal-ext.properties で設定ファイルを Liferay に向けます。
    • cluster.link.channel.properties.control=[CONFIG_FILE_PATH]/control_file.xml
    • cluster.link.channel.properties.transport.0=[CONFIG_FILE_PATH]/transport_file.xml
  6. (Liferay 6.1の場合)。キャッシュ設定フック を作成して、 liferay-multi-vm-clustered.xmlhibernate-clustered.xml ファイルを修正します。
    • liferay-multi-vm-clustered の特定のバージョンでは、 LPS-28163で説明されているように、二重のピリオドが存在する場合があることに注意してください。
      (例: 以下のように EntityCache と com の間に "..." が表示される場合があります。

      <cache
      eternal="false"
      maxElementsInMemory="100000"
      name="comliferayportalkerneldaoormEntityCachestrongstrongcomliferayportalmodelimplResourceActionImpl"
      overflowToDisk="false"
      timeToIdleSeconds="600"
      >

    • SocialEquitySettingLocalServiceImpl はLiferay 6.0以下で呼び出されるべきですが、 SocialActivitySettingLocalServiceImpl はLiferay 6.1 EE以上で呼び出されるべきです。

セットアップの概要

上記の手順をまとめると、UDP/マルチキャストに対応している環境であれば、マルチキャスト通信のポート設定だけで済みます。 ただし、UDP/マルチキャストを利用できない環境では、別のユニキャストプロトコルスタックを利用する必要があります(例えば、ディスカバリ用のJDBCやトランスポート用のTCPなど)。

特定の設定

分散キャッシュの実装方法の違いによる具体的な構成は以下の通りである。 サンプルファイルが含まれていますが、特定の環境に合わせて微調整が必要になる可能性が高いことを覚えておいてください。

デフォルト(MPING UDP/IPマルチキャスト

  1. portal-ext.propertiesを設定する
    • cluster.link.enabled=true
    • ehcache.cluster.link.replication.enabled=true
  2. ehcache-cluster-web をデプロイします。
  3. ネットワークの仕様に合わせてマルチキャストアドレス/ポートを微調整

ここに例を示します(これはデフォルトで動作している portal.properties ファイルから取得したものです)。 上記の通り、ネットワークによってはIPアドレスの微調整が必要な場合があります)。

この構成では、ディスカバリに MPING を使用し、トランスポートに UDP を使用します。 一般的には、 UDPが使用できるのであれば、他のプロトコルを使用したり、設定したりする必要はありません。の場合

TCP トランスポート

トランスポートにTCPを使用するには、カスタムディスカバリープロトコルを選択する必要があります。JDBC_PING、TCP_PING、MPING、S3_PING(Amazonのみ)、RACKSPACE_PING(Rackspaceのみ

JDBC_PING

JDBC PINGはLiferay 6.2以上(および platform-12-6130 以上の修正パックがインストールされているLiferay 6.1 EE GA3)でのみ利用可能であることに注意してください。

  1. portal-ext.propertiesを設定する
    1. cluster.link.enabled=true
    2. ehcache.cluster.link.replication.enabled=true
    3. (後のステップで cluster.link.channel.properties を追加する予定です)。
  2. ehcache-cluster-web プラグインをデプロイします。
  3. 必要なJVMパラメータの追加
    1. -Djgroups.bind_addr=<node_address>
    2. -Djgroups.tcpping.initial_hosts=<node1address>[port1],<node2address>[port2]...
    3. Windows 環境では、これらのプロパティは setenv.batに追加されます。 Linux/Unix 環境では、 setenv.shにプロパティを追加することができます。
  4. JDBCディスカバリー設定ファイルの作成
    1. CATALINA_BASE\webapps\ROOTOTWEB-INFlib\jgroups.jar から tcp.xml を取り出して、クラスパスのどこかに配置する。
    2. コピーした tcp.xml ファイルの名前を jdbc_ping_config.xmlに変更します。
    3. ファイル内では、置換します。
      <TCPPING timeout="3000"
      initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7800],localhost[7801]}"
      port_range="1
      num_initial_members="3"/>
      					
      と一緒に。
      <JDBC_PING
      connection_url="jdbc:mysql://[DATABASE_IP]/[DATABASE_NAME]?useUnicode=true&amp;characterEncoding=UTF-8&amp;useFastDateParsing=false"
      connection_username="DATABASE_USER"
      connection_password="[DATABASE_PASSWORD]"
      connection_driver="com.mysql.jdbc.Driver"/>
      				
  5. 設定ファイルに次のように追加して、Liferayをポイントします portal-ext.properties.
    • cluster.link.channel.properties.control=[CONFIG_FILE_PATH]/jdbc_ping_config.xml
    • cluster.link.channel.properties.transport.0=[CONFIG_FILE_PATH]/jdbc_ping_config.xml

最後に、データベースユーザーがテーブルを作成する機能を持っていない場合は、事前にJGROUPSPINGテーブルを手動で作成する必要があります。 詳細については、JDBCPINGのドキュメントを参照してください。

TCP_PING

  1. portal-ext.propertiesを設定する
    1. cluster.link.enabled=true
    2. ehcache.cluster.link.replication.enabled=true
    3. (後のステップで cluster.link.channel.properties を追加する予定です)。
  2. ehcache-cluster-web プラグインをデプロイします。
  3. 必要なJVMパラメータの追加
    1. -Djgroups.bind_addr=<node_address>
    2. -Djgroups.tcpping.initial_hosts=<node1address>[port1],<node2address>[port2]...
    3. Windows 環境では、これらのプロパティは setenv.batに追加されます。 Linux/Unix 環境では、 setenv.shにプロパティを追加することができます。
  4. TCPディスカバリー設定ファイルの作成
    1. CATALINA_BASE\webapps\ROOTOTWEB-INFlib\jgroups.jar から tcp.xml を取り出して、クラスパスのどこかに配置する。
    2. ファイルをコピーして、1つのコピーをリネーム tcp_ping_control.xml. もう一つのコピー tcp_ping_transport.xmlの名前を変更します。
    3. TCP_PINGはデフォルトの発見方法なので、変更するのは以下の設定のみです。 HostAとHostBを例に挙げる
      1. TCP bind_port
      2. のIPアドレス/ポートは
        1. <TCPPING timeout="3000"
        2. initial_hosts="HostA[7800],HostB[7801]"
        3. port_range="1"
        4. num_initial_members="3"/>です。
    4. TCP タグに singleton_name="liferay_tcp_cluster" を追加します。
  5. 次の portal-ext.properties を追加して、設定ファイルに Liferay をポイントします。
    1. cluster.link.channel.properties.control=[CONFIG_FILE_PATH]/tcp_ping_control.xml
    2. cluster.link.channel.properties.transport.0=[CONFIG_FILE_PATH]/tcp_ping_transport.xml

この構成では、ディスカバリに TCP_PING を使用し、トランスポートに TCP を使用します。 TCP_PINGでは、クラスタのすべてのメンバーを事前に指定する必要があります。 これは自動検出プロトコルではありません(例: クラスタのメンバーの追加/削除はサポートされていません)。

S3_PING

  1. portal-ext.propertiesを設定する
    1. cluster.link.enabled=true
    2. ehcache.cluster.link.replication.enabled=true
    3. (後のステップで cluster.link.channel.properties を追加する予定です)。
  2. ehcache-cluster-web プラグインをデプロイします。
  3. 必要なJVMパラメータの追加
    1. -Djgroups.bind_addr=<node_address>
    2. -Djgroups.tcpping.initial_hosts=<node1address>[port1],<node2address>[port2]...
    3. Windows 環境では、これらのプロパティは setenv.batに追加されます。 Linux/Unix 環境では、 setenv.shにプロパティを追加することができます。
  4. S3 Discoveryの設定ファイルを作成する.
    1. tcp.xml from CATALINA_BASE\webapps\ROOTWEB-INF\libjgroups.jar を取り出して、便利な場所に置く。
    2. コピーした tcp.xml ファイル s3_ping_config.xmlの名前を変更します。
    3. ファイル内では、置換します。
      1. <TCPPING timeout="3000" initial_hosts="HostA[7800],HostB[7801]" port_range="1" num_initial_members="3"/>
    4. をもって
      1. <S3_PING secret_access_key="SECRETKEY" access_key="ACCESSKEY" location="ControlBucket"/>
  5. 設定ファイルに次のように追加して、Liferayをポイントします portal-ext.properties.
    1. cluster.link.channel.properties.control=[CONFIG_FILE_PATH]/s3_ping_config.xml
    2. cluster.link.channel.properties.transport.0=[CONFIG_FILE_PATH]/s3_ping_config.xml

以下のLiferay 6.1のサンプル設定ファイルに注意してください。 s3_ping_config.xml

この構成では、ディスカバリにS3_PINGを使用し、トランスポートにTCPを使用します。 S3_PINGはAmazon Web Servicesにのみ適用されます。

追加情報

デバッグのヒント

ハイレベルをテストし、次にローレベルをテストします。

一般的なルールとして、クラスタリングの問題をトラブルシューティングする最良の方法は、高レベルでテストして機能を検証し、低レベルでスタックをウォークスルーすることです。

  1. ハイレベル検証。
    1. UIを通じて1つのノードのコンテンツを変更(ポートレットの追加、ユーザープロファイルのフィールドの変更)し、ページの更新後に別のノードに表示されるかどうかを確認します。 上手くいったら終了です。
  2. 低レベル試験。
    1. MulticastServerToolは、ネットワーク上にハートビートがあるかどうかを判断するために使用することができます。 このツールを活用するために
      1. ~[LIFERAY_HOME~] フォルダにMulticastcodeというフォルダを作成します。
      2. 以下の3つのクラスをMulticastcodeフォルダにコピーします。
        1. CATALINA_BASE~/webapps~/ROOT~/WEB-INF~/lib~/commons-logging.jar
        2. CATALINA_BASE~/webapps~/ROOT~/WEB-INF~/lib~/util-java.ja
        3. CATALINA_BASE~/lib~/ext~/portal-service.jar
      3. Multicastcodeフォルダ内のコマンドプロンプトから、マルチキャストサーバーツールを呼び出します。 デフォルトの設定を使っている場合は、コマンドになります。
        1. java -cp util-java.jar;portal-service.jar;commons-logging.jar com.liferay.util.transport.MulticastServerTool 239.255.0.5 23305 5000code
      4. ネットワークがUDPに対応している場合は、出力に「ハートビート」が表示されるはずです。
      5. 同様に、MultiCastClientToolは、クラスタ上の異なるノードの同じフォルダから呼び出されることがあります。
      6. 解凍したマルチキャストフォルダから、MulticastClientToolを呼び出します。 デフォルトの設定ではこれになります。
        1. java -cp util-java.jar;portal-service.jar;commons-logging.jar com.liferay.util.transport.MulticastClientTool -h 239.255.0.5 -p 23305
      7. 出力については、 com.liferay.util.transport.MulticastDatagramHandlerの処理 とその下の文字を変更しているのを見るべきです。
    2. デバッグプロパティの追加
      1. cluster.executor.debug.enabled~=truecode
      2. このプロパティは、クラスタのJOIN~/DEPARTイベントbに関する非常に有用な情報を記録します。 より小さなクラスターでは、これらのイベントは、このプロパティが生産中に残っている可能性がある十分にまれでなければなりません。
    3. jgroupsの追加 ロギング
      1. org.jgroups.protocols.pbcastcodeでlog4jcodeのロギングをALLにする(UIを通して)
      2. これにより、制御チャネル(心拍)とトランスポートトラフィックの両方に関する詳細なステートメントがログに追加されます。 Liferay ロギングの詳細については、ユーザーガイドを参照してください。
      3. 問題が解決せず、ネットワークがまだ潜在的な原因である場合は、組み込みの jgroups test client~/sender クラスを使用して、ポータルが正しく機能しているかどうかを確認することができます。
    4. プロキシとファイアウォールの設定を確認する
      1. 通常、これ以上のJGroupsの設定は必要ありません。 しかし、非常に特殊なケースでは、クラスタノードが複数のネットワークにまたがって配置されている場合(その場合のみ)、パラメータ external_addrcode を各ホストでファイアウォールの外部(パブリックIP)アドレスに設定しなければなりません。 これを設定することで、別々のネットワーク(異なるファイアウォールで区切られたノードなど)に配置されているクラスタ化されたノード同士が通信できるようになります。 しかし、これはより多くのInfoSec audits.JGroupsのドキュメントを引き起こす可能性があります。
    5. お役立ちリンク
      1. JGroups ツールキットを使用した信頼性の高いマルチキャスト
      2. 既知の問題。NACKACKはメモリリークを引き起こす可能性があります。
      3. Ehcache: http:~//www.ehcache.org~/documentation~/user-guide~/configuration
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています