サイドカーまたはEmbedded モードのElasticsearchの使用
ZIPファイルまたはDockerイメージを介してインストールされたLiferay Tomcatバンドルには、Liferayで始まるElasticsearchノードが含まれています。 Liferay 7.3+ と 7.4+ のノードはサイドカーサーバーとして別のJVMで動作し、Liferay 7.2 のノードはLiferayサーバーに埋め込まれています。
Elasticsearchサーバーには、次のURLからアクセスできます。
- http://localhost:9201 Liferay 7.3+および7.4+の場合
- http://localhost:9200 Liferay 7.2
サイドカーサーバーの出力例は次のとおりです。
{
"name" : "liferay",
"cluster_name" : "LiferayElasticsearchCluster",
"cluster_uuid" : "aDsZ5VWTQ96-lT-7WmcoHg",
"version" : {
"number" : "7.17.14",
"build_flavor" : "unknown",
"build_type" : "unknown",
"build_hash" : "e3b0c3d3c5c130e1dc6d567d6baef1c73eeb2059",
"build_date" : "2023-07-20T05:33:33.690180787Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
バンドルされているElasticsearchサーバーは開発とテストには便利ですが、どちらも本番環境には適していません。
本番環境でサポートされている構成ではありませんが、KibanaをインストールしてバンドルされているElasticsearchサーバーを監視することは、開発やテストの際に役立ちます。
- Liferay 7.3 では、 OSS のみの Kibana ビルド をインストールします。
- Liferay DXP 7.4 U17+ および Liferay Portal 7.4 GA17+ では、無料版の Kibana をインストールしてください。
セットアップでエラーが発生した場合は、 トラブルシューティングのセクションを参照してください。
HSQLのような組み込みデータベースを本番環境で実行したり、バンドルされたElasticsearchサーバーを本番環境で実行したりしないでください。 代わりに、Elasticsearchをスタンドアロンサーバーまたはサーバーノードのクラスターとしてリモートモードで実行します。
検索チューニングアプリ 同義語セット と 結果ランキング は、Liferay 7.2と7.3のプライマリデータストレージに検索インデックスを使用しました。 これらのアプリのデータは、Liferayのデータベースには保存されていません。 そのため、Liferay 7.2や7.3でサイドカーやEmbedded モードのElasticsearchを使用中に同義語セットや結果ランキングを設定した場合、リモートElasticsearchサーバーに切り替えて再インデックス化しても、それらの設定は復元 されません 。 その代わり、同義語セットと結果ランキングをリモートのElasticsearchクラスタに手動で取り込む必要があります。 Elastic の Snapshot and Restore 機能を使用してこれらのインデックスを保存する方法については、 アップグレードガイド を参照してください。
バンドルされているElasticsearchサーバーのユースケース
デフォルトのElasticsearchサーバー(サイドカーおよびEmbedded)の一般的な使用法は次のとおりです。
- カスタムの 検索機能とインデックスコード のテスト
- Kibanaを介してElasticsearchで直接クエリを実行して検索クエリを開発する
- 検索の調整 機能のテスト
- 検索ウィジェット の調査と設定
アプリサーバーの違い
Liferay 7.4 (DXP、Portal)、Liferay DXP 7.3、Liferay Portal 7.3 GA4+ では、Elasticsearch サイドカーサーバーが Tomcat バンドルと Docker イメージに同梱されています。 サポートされているアプリケーションサーバーにLiferay WARをインストールする場合、いくつかの重要な違いがあります。
以下の表では、_7.3+_という表記はLiferay 7.4(DXPとPortal)を含みます。
Liferay DXPのフレーバー | デフォルトのElasticsearch | 事前インストール | 手動による介入が必要 |
---|---|---|---|
Tomcatバンドル:7.3以降 | サイドカー | ✔ | ✘ |
Tomcat:7.3以降 | サイドカー | ✘ | ✘ (自動ダウンロードされました) |
Docker: 7.3以降 | サイドカー | ✔ | ✘ |
JBoss:7.3以降 | サイドカー | ✘ | ✘ (自動ダウンロードされました) |
Wildfly:7.3以降 | サイドカー | ✘ | ✘ (自動ダウンロードされました) |
WebSphere:7.3以降 | サイドカー | ✘ | ✔ |
Weblogic:7.3以降 | サイドカー | ✘ | ✔ |
すべてのフレーバー:7.2/7.3 GA3- | (それは、) | ✔ | ✘ |
Tomcat以外のアプリケーションサーバーのバンドルをダウンロードした場合、サーバーを起動すると、Elasticsearchディストリビューションがオンザフライでダウンロードされ、サイドカーサーバーとして起動されます。
WebSphere および Weblogic アプリケーションサーバーへの Liferayのインストール手順には、サイドカーサーバーを初期化するために必要な Elasticsearchアーカイブを手動で提供する手順が含まれています。
バンドルされているElasticsearchサーバは、開発およびテスト目的に有用であり、本番環境では使用しないでください。 リモート検索エンジンのインストールについては、 Elasticsearchのインストール を参照してください。
Embeddedとサイドカーの比較
ElasticsearchサーバーのEmbeddedモードとサイドカーモードの比較を次に示します。
Embedded | サイドカー |
---|---|
安全な接続を構成できません | 安全な接続を構成できません |
ElasticsearchのOSSバージョンを使用します | Liferay 7.3は、OSSバージョンのElasticsearchを使用し、 Liferay DXP 7.4 U17とLiferay Portal 7.4 GA17ではOSS Elasticsearchを使用しなくなりました。 |
http://localhost:9200 | http://localhost:9201 |
すべてのLiferayディストリビューションに事前インストールされています | 常に事前インストールされているわけではありません |
本番環境ではサポートされていません | 本番環境ではサポートされていません |
アプリサーバーに特別な手順は必要ありません | 一部のアプリサーバー では追加の手順が必要です |
サイドカー/Embedded モードのElasticsearchのトラブルシューティング
これらのエラーは、起動時のElasticsearch Sidecarのインストールに問題があることを示しています。
2022-03-02 17:32:22.952 ERROR [main][ElasticsearchConnectionManager:81] Elasticsearch sidecar could not be started. Search will be unavailable. Manual installation of Elasticsearch and activation of remote mode is recommended.
2022-03-04 10:41:13.249 ERROR [com.liferay.portal.search.elasticsearch7.internal.sidecar.SidecarMainProcessCallable@3da0921a[-Xms1g -Xmx1g -XX:+AlwaysPreTouch -Des.path.conf=/home/tibusz/liferay/bundles/master/tomcat-9.0.56/temp/sidecar5219314832153809763/config -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dio.netty.allocator.type=unpooled -Dio.netty.allocator.numDirectArenas=0 -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/home/tibusz/liferay/bundles/master/tomcat-9.0.56/temp/sidecar5219314832153809763 -Djava.security.policy=jar:file:/home/tibusz/liferay/bundles/master/osgi/state/org.eclipse.osgi/257/0/bundleFile!/META-INF/sidecar.policy -Djna.nosys=true]-][Sidecar:198] Abort subprocess piping
java.io.InvalidClassException: org.elasticsearch.ElasticsearchException; local class incompatible: stream classdesc serialVersionUID = 4568865521165719982, local class serialVersionUID = -7656133510021522625
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:689) ~[?:?]
2022-03-04 10:41:30.191 ERROR [main][SidecarManager:93] bundle com.liferay.portal.search.elasticsearch7.impl:6.0.34 (257)[com.liferay.portal.search.elasticsearch7.internal.sidecar.SidecarManager(973)] : The activate method has thrown an exception
java.util.concurrent.CancellationException: null
at java.util.concurrent.FutureTask.report(FutureTask.java:121) ~[?:?]
at java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[?:?]
at com.liferay.portal.search.elasticsearch7.internal.sidecar.Sidecar._waitForPublishedAddress(Sidecar.java:591) ~[?:?]
2022-03-04 10:41:30.162 WARN [com.liferay.portal.search.elasticsearch7.internal.sidecar.SidecarMainProcessCallable@3da0921a[-Xms1g -Xmx1g -XX:+AlwaysPreTouch -Des.path.conf=/home/tibusz/liferay/bundles/master/tomcat-9.0.56/temp/sidecar5219314832153809763/config -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dio.netty.allocator.type=unpooled -Dio.netty.allocator.numDirectArenas=0 -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/home/tibusz/liferay/bundles/master/tomcat-9.0.56/temp/sidecar5219314832153809763 -Djava.security.policy=jar:file:/home/tibusz/liferay/bundles/master/osgi/state/org.eclipse.osgi/257/0/bundleFile!/META-INF/sidecar.policy -Djna.nosys=true]-][Sidecar:632] Sidecar Elasticsearch process is aborted
java.util.concurrent.ExecutionException: com.liferay.petra.process.TerminationProcessException: Subprocess terminated with exit code 130
at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[?:?]
at java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[?:?]
at com.liferay.portal.search.elasticsearch7.internal.sidecar.Sidecar$RestartFutureListener.complete(Sidecar.java:628) [bundleFile:?]
at com.liferay.petra.concurrent.DefaultNoticeableFuture$OnceFutureListener.complete(DefaultNoticeableFuture.java:111) [com.liferay.petra.concurrent.jar:?]
at com.liferay.petra.concurrent.DefaultNoticeableFuture.done(DefaultNoticeableFuture.java:85) [com.liferay.petra.concurrent.jar:?]
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381) [?:?]
at java.util.concurrent.FutureTask.setException(FutureTask.java:250) [?:?]
at com.liferay.petra.concurrent.DefaultNoticeableFuture.setException(DefaultNoticeableFuture.java:79) [com.liferay.petra.concurrent.jar:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:269) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: com.liferay.petra.process.TerminationProcessException: Subprocess terminated with exit code 130
at com.liferay.petra.process.local.LocalProcessExecutor$SubprocessReactor.call(LocalProcessExecutor.java:309) ~[com.liferay.petra.process.jar:?]
at com.liferay.petra.process.local.LocalProcessExecutor$SubprocessReactor.call(LocalProcessExecutor.java:161) ~[com.liferay.petra.process.jar:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
原因: org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException:コーデック 'Lucene87' をロードできませんでした。 lucene-backward-codecs.jarを追加し忘れていませんか?
このようなエラーを解決するには
-
Liferayを停止します。
-
Liferay Home]/elasticsearch-sidecar/
または[Liferay Home]/elasticsearch7
を削除します。 このフォルダーには、Sidecar Elasticsearchランタイムが含まれています。 -
Liferay Home]/data/elasticsearch7
を削除します。 このフォルダーには、インデックスデータが含まれています。 -
Liferayを再起動します。
-
ポータルは、 選択したアプリケーションサーバー (例: Tomcatなど)上で、起動時にElasticsearchランタイムをダウンロードし、展開します。