通常、企業でLiferayを利用する場合、拡張性と高可用性を確保するためにクラスタリングを利用するのが一般的です。この記事では、既存のクラスター環境上に基本となる設定でLiferay DXPをインストールする方法を説明しています。
Liferayを設定することで高可用性/クラスタリングされた環境が自動的に作成されるということはありません。ロードバランサー、サーバーとデータベースがクラスタリングされた環境を、クラスタリング環境と呼んでいます。まず、クラスタリングのための環境を整備してから、その上にLiferay Digital Enterprise 7.0をインストールできる状態になります。この記事は ユーザーガイド にあるクラスタリングの詳細手順を記載しています。
Liferayはデフォルトで、マルチキャストのクラスタリング環境を使用しますが、ユニキャストを 選択することも可能です。portal-ext. properties
に、マルチキャストのポータル番号を設定することで稼働中の他インスタンスが競合するのを回避します。ユニキャストクラスタを使用する場合は、Liferayでサポートしているオプション(TCP, Amazon S3、File Ping 、JDBC Ping) が利用可能です。
詳細
クラスタリング環境の設定条件
- 各ノードにアクティベーションキーをデプロイ
- 全ノードが同じLiferayデータベースとデータベースクラスタと接続していることを確認
- 同一のドキュメント&メディアレポジトリに対して、クラスタ上のどのノードからもアクセス可能なことを確認
- サーチインデックスは独立したサーバー(Elasticsearch / Solr)上に構築
- キャッシュがノード間で正しく共有されているかを確認
- 集中管理サーバーファームのデプロイメントを行っていない場合、ホットデプロイフォルダーが各ノードに設定されます
- 全ノードを同じパッチレベルにする
クラスターのアクティベーションキー
Liferay デジタル エクスペリエンス プラットフォームが正常に稼働するためには、クラスタリングを構成する全てのノードにクラスター アクティベーションキーがデプロイされている必要があります。クラスタアクティベーションキーの取得に関する詳細は こちらをご覧ください。
アクティベーションキーを正常に動作させるには、portal-ext.properties内で、以下のプロパティでCluster Linkが有効になっているか確認してください。
cluster.link.enabled=true
データベース
全ノードが同じLiferayデータベースと接続していることを確認します。portal-ext.propertiesまたはアプケーションサーバーからJDBCを設定します。
テスト方法
-
Liferayノード間のクラスタリング状況を管理する、クオーツスケジューラーがマスターノードを選出できるように、Tomcats(ノード1、2)をノード1、ノード2と 順番に起動します。
-
ログインして、ノード1にポートレット(例:Hello Velocity)を追加します。
-
ノード2でページを更新します。
追加したポートレットがノード2で表示されるはずです。複数のノードがある場合、1つのノードでの変更が、他のノードに反映されるか、確認を繰り返してください。
ドキュメントとメディアライブラリ共有
以下 はAdvancedFileSystemStoreにおけるプロパティー設定の例になります。他のリポジトリドライバを利用する場合は、適時読み替えてください。
portal-ext.properties内の下記プロパティーはOSGi設定ファイルに移動されます。
dl.store.file.system.root.dir=
dl.store.impl=com.liferay.portal.store.file.system.AdvancedFileSystemStore
移動先:osgi/configs:
com.liferay.portal.store.file.system.configuration.AdvancedFileSystemStoreConfiguration.cfg
プロパティ | デフォルト | 必須 |
rootDir |
data/document_library |
false |
クラスタ内のノードは、ドキュメントライブラリを参照時に同じプロパティを相互に反映している必要があります。これが正常にできていない場合、データの破損やインデックスに関する問題が発生する可能性があります。
テスト方法
-
ノード1でドキュメントライブラリにドキュメントをアップロードします
-
ノード2で、先程アップロードしたドキュメントをダウロードします
正しく設定されている場合は、ドキュメントがダウンロードされます。ノードを逆にしてこの作業を繰り返します。
注1:高可用性環境においては、Advanced File System Store 以外にもドキュメント、メディアライブラリを共有するもありますが、異なる共用システム同士で、ドキュメントおよびメディアの共有はできないので、それまでにアップロードしたファイルはポータルから読み取ることが出来なくなります。ファイルストアの種類を変更し、変更しかつ、すでにアップロードしているファイルもアクセス可能にしておくためには、、ファイルストアの移行を実行します。
注2:ドキュメントをファイルシステムに格納する以外の選択肢としては、下記のプロパティで、DBStoreを利用してデータベースに情報を格納できます。
dl.store.impl=com.liferay.portal.store.db.DBStore
注3:データベース上でJCRStoreを使用する事も選択肢の一つです。Jackrabbitはインデックスを独自のテーブルに作成しないため、時間の経過とともにパフォーマンスを低下させる可能性があります。そのためJackrabbitの全テーブルのprimary key列のインデックスを手動で変更してください。またデータベースへの接続量の制限の設定に関して注意してください。
注4:データベースへの接続数も要因になるので、アプリケーションサーバーへのデータベース接続の数を増やすことを検討してください。
注5:ファイルの様々な保存方法に関する詳細な説明については、Liferay公式ドキュメントにあるレポジトリを参照してください。
サーチとインデックス共用
Liferay DXPを起動する際、スケーラビリティ上の理由から検索エンジンをメインLiferayサーバーから分離する必要があります。この方法は Elasticsearch または Solrの2種類あります。
テスト方法:
ノード1でコントロールパネル → ユーザーに移動し、新しいユーザーを作ります。
ノード2で、コントロールパネル → ユーザーに移動します。新しいユーザーが作成されたことを確認します。
正常に設定できた場合、新しいユーザーは別のノードに表示されるので再インデックスする必要はありません。ノードを逆にして同様にテストを行います。
注:この時点でインデックスをローカル環境に保存ができなくなります。(lucene.replicate.write = trueは非推奨です)
分散キャッシング(マルチキャストまたはユニキャスト)
分散キャッシングにより、LiferayクラスタはEhcache経由で複数のクラスタノード間でキャッシュコンテンツを共有できます。分散キャッシュの管理の記事に具体的な説明がありますので、ご参照ください。
注1:Ehcacheのパラメータを調整することにより、様々なオブジェクトをキャッシュできます。キャッシュ設定の詳細については「ユーザーガイド」の「分散キャッシング」セクションをご覧ください。高度な最適化と設定については、Ehcacheのドキュメントを参照してください。
注2:Ehcacheのデフォルトのキャッシュ複製方法や、ポータルへのチューニングキャッシュの配備方法については、 Advanced Ehcache Configuration(高度なEhcache設定)ナレッジベース記事を参照してください。
ホットデプロイ フォルダ
ホットデプロイ フォルダーは新しいコンポーネントをシステムにインストールするためにLiferayが提供するメカニズムです。Liferayはホットデプロイ フォルダを参照してローカルファイルをインストールします。デフォルト値では、ホットデプロイフォルダは${liferay.home}に作られます。ディレクトリの場所とフォルダの名前の変更は、portal-ext.propertiesを使って行います。
# Set the directory to scan for layout templates, portlets, and themes to
# auto deploy.
#
auto.deploy.deploy.dir=${liferay.home}/deploy
デフォルトでは、デプロイされたモジュールは クラスタ内のノードに個別にインストールする必要があります。手動、自動またはアプリケーション サーバーの集中サーバーファームデプロイメントを通してのインストールのどの手段を取るかは、使用状況や要件に応じて決定します。
インストール時の重要な点は、Liferayの全ノードに同じポートレット/モジュールがデプロイされていることです。同じポートレット/モジュールがインストールされていない場合、データ不一致や、データ破損が発生する可能性があります。現時点では、Liferay側で、設定、パッチレベル、ポートレット/モジュールの一貫性を検証するシステムが存在しないので、システム管理者がノードの一貫性の維持を保つ必要があります。
パッチレベル
ホットデプロイフォルダーと同様に、Liferayには全ノードに同じパッチがインストールされている必要があります。Liferayでパッチの一貫性を保つ機能がありませんが、パッチングツール プロファイル機能を使って、クラスタ内の複数のLiferayノードにパッチを適用することができます。
その他確認項目
-
一部のオペレーティング・システムでは、IPv4アドレスとIPv6アドレスが混在しているため、クラスタリングが使用できません。この解決には下記のJVMスタートアップパラメーターを追加します。
-Djava.net.preferIPv4Stack=true.
-
同じマシン上でクラスタノードを起動する場合は、以下を構成する必要があります。
-
アプリケーション サーバー ポート
-
portal-ext.propertiesを介したOSGiコンソールポート
-
module.framework.properties.osgi.console=localhost:11311
追加情報
この記事に記載されているリンクは定期的に更新されます。ご理解とご協力をよろしくお願い致します。
関連リンク:
- Document Repository Configuration (AdvancedFileStore以外のレポジトリをご使用の場合はこちら)
- Liferay's DXP Whitepapers
- Deployment Checklist
- Upgrading to Liferay DXP.