クラスタープラグイン
クラスタ(CoreContainer-レベル)プラグインサブシステム
クラスタプラグインは、CoreContainer
(ノード)レベルで定義およびインスタンス化されるプラグ可能なコンポーネントです。これらのコンポーネントは通常、Solrノードレベルで管理レベルの機能と追加の機能用APIを提供します。
プラグイン構成
solr.cluster.plugin.edit.enabled
プロパティがtrue(デフォルト)に設定されている場合、プラグイン構成は/cluster/plugin
APIを使用して管理できます。
このAPIエンドポイントは、プラグイン構成の追加、削除、更新を可能にします。
各プラグインには、登録されている一意の名前が必要です。同じ名前のプラグインを追加しようとすると、エラーになります。一部のタイプのプラグインは事前定義された名前を使用しており、適切に機能するためにはこれらの名前で登録する必要があります。
内部的には、Solr 9.0のプラグイン構成はZooKeeperの/clusterprops.json
ファイルにplugin
エントリの下にJSONマップとして管理されます。構成はJSONマップであり、キーはプラグインの一意の名前で、値はシリアル化されたorg.apache.solr.client.solrj.request.beans.PluginMeta
ビーンです。
次の共通のプラグインプロパティがサポートされています
名前
-
必須
デフォルト:なし
一意のプラグイン名。一部のプラグインタイプでは、適切に機能するために事前定義された名前の1つを使用する必要があります。規約上、このような事前定義された名前は先頭のドットプレフィックス(例:
.placement-plugin
)を使用します。 クラス
-
必須
デフォルト:なし
実装クラス。クラスがSolrの一部として利用可能な場合は完全修飾クラス名として指定することも、
<package>:<className>
構文を使用してSolrパッケージ内のクラスを参照することもできます。 バージョン
-
任意
デフォルト:なし
Solrパッケージのバージョン。
クラスがSolr自体ではなくパッケージからロードされる場合、このパラメータが必要です。
パスプレフィックス
-
任意
デフォルト:
なし
プラグインで定義されたREST APIエンドポイントに追加されるパスプレフィックス。
構成
-
任意
デフォルト:
なし
追加のプラグイン構成パラメータのJSONマップ。
ConfigurablePlugin
インターフェイスを実装するプラグインは、このマップから逆シリアル化されたプラグイン固有の構成オブジェクトで初期化されます。
プラグイン構成の例
curl -X POST -H 'Content-type: application/json' -d '{
"add":{
"name": ".placement-plugin",
"class": "org.apache.solr.cluster.placement.plugins.AffinityPlacementFactory",
"config": {
"minimalFreeDiskGB": 20,
"prioritizedFreeDiskGB": 100,
"withCollection": {
"A_primary": "A_secondary",
"B_primary": "B_secondary"
}
}
}}'
https://127.0.0.1:8983/api/cluster/plugin
クラスタプラグインの種類
一般的にプラグインからロードされるクラスは、2 種類の機能をサポートします(互いに排他的ではありません)。
-
REST API エンドポイントを公開するリクエストハンドラプラグイン(実装クラスは
@EndPoint
およびオプションで@Command
アノテーションが付けられます)。これらのプラグインの API は、@EndPoint
アノテーションで定義されたパスの下の REST エンドポイントとして自動的に登録されます。 -
内部コンポーネントとして使用する特定のインターフェイスを実装するプラグインです。ロード後に自動的に検出され、このタイプのプラグインを使用するサブシステムに登録されます。ここでの例には、
ClusterSingleton
、ClusterEventProducer
、ClusterEventListener
、PlacementPluginFactory
があります。
プラグインの種類
定義済みのプラグイン名
これらの名前のプラグインは、Solr の特定の部分で使用されます。これらの名前は予約されており、他のプラグインの種類には使用できません。
-
.placement-plugin
:PlacementPluginFactory
インターフェイスを実装するプラグイン。このタイプのプラグインは、クラスター内のレプリカ配置戦略を決定します。 -
.cluster-event-producer
:ClusterEventProducer
インターフェイスを実装するプラグイン。このタイプのプラグインは、クラスターレベルのイベントを生成するために使用されます。
ClusterSingleton プラグイン
ClusterSingleton
インターフェイスを実装するプラグインは、各 Solr ノードでインスタンス化されます。ただし、インターフェイスで定義されている開始/停止ライフサイクルは、クラスター内に実行中のプラグインインスタンスが常に 1 つだけになるように制御されます。
(現在はオーバーシアリーダーの選出を再利用することで実装されており、RUNNING 状態のすべての ClusterSingleton
がオーバーシアリーダーノードで実行されます)。
すべてのプラグインは、Solr にこのクラスターシングルトン動作が必要であることを示すために、このインターフェイスを実装できます。
ClusterSingleton
プラグインは、solr.xml で宣言することでも構成できます。
ClusterEventProducer プラグイン
クラスターレベルイベントの生成をサポートするために、ClusterEventProducer
の実装が各 Solr ノードで作成されます。このコンポーネントは ClusterSingleton
でもあり、つまり、アクティブなインスタンスは 1 つだけクラスターに存在します。
プラグイン構成が指定されていない場合、既定の実装の org.apache.solr.cluster.events.impl.NoOpProducer
が使用され、イベントは生成されません。つまり、既定ではイベント生成は無効になっています。ノードおよびコレクションイベント生成をサポートする実装は、org.apache.solr.cluster.events.impl.DefaultClusterEventProducer
でも利用できます。
イベントプロデューサーの構成は、事前定義されたプラグイン構成を変更することで動的に変更できます。
curl -X POST -H 'Content-type: application/json' -d '{
"add":{
"name": ".cluster-event-producer",
"class": "org.apache.solr.cluster.events.impl.DefaultClusterEventProducer"
}}'
https://127.0.0.1:8983/api/cluster/plugin
単にプラグインを削除することで、デフォルトの no-op 構成に回復できます
curl -X POST -H 'Content-type: application/json' -d '{
"remove": ".cluster-event-producer"
}'
https://127.0.0.1:8983/api/cluster/plugin
ClusterEventListener プラグイン
ClusterEventListener
インターフェイスを実装するプラグインは、ClusterEventProducer
のインスタンスに自動的に登録されます。
実装には ClusterEventProducer
によって生成されたすべてのイベントが通知され、関心のあるイベントのみを選択する必要があります。
org.apache.solr.cluster.events.impl.CollectionsRepairEventListener
NODE_LOST イベントに反応し、レプリケーション数を以前と同じままにするために他のノードにどのレプリカを追加する必要があるかをチェックするリスナーの実装です。
この実装は一定時間(デフォルトは 30 秒)待って、ノードが本当にダウンしていることを確認します。十分に長くダウンしていたノード上にあるレプリカに対して、これらのノードで失われたレプリカを補う適切な ADDREPLICA コマンドを生成します。
プラグイン構成の例
curl -X POST -H 'Content-type: application/json' -d '{
"add":{
"name": "collections-repair-listener",
"class": "org.apache.solr.cluster.events.impl.CollectionsRepairEventListener"
}}'
https://127.0.0.1:8983/api/cluster/plugin
プラグイン管理 API
プラグインのリスト
このコマンドは HTTP GET を使用し、ロードされたプラグインとその構成のリストを返します
curl https://127.0.0.1:8983/api/cluster/plugin
プラグインの追加
このコマンドは HTTP POST を使用して、新しいプラグイン構成を追加します。同じ名前のプラグインが既に存在する場合、エラーが発生します。
Solr パッケージに含まれるプラグインを追加するコマンドの例
curl -X POST -H 'Content-type: application/json' -d '{
"add":{
"name": "my-plugin1",
"class": "my-package:com.example.MyPlugin",
"version": "1.0"
}}'
https://127.0.0.1:8983/api/cluster/plugin
プラグインの更新
このコマンドは HTTP POST を使用して、既存のプラグイン構成を更新します。この名前のプラグインが存在しない場合、エラーが発生します。
この例では既存のプラグインを更新し、その構成パラメーターを変更します。プラグインの古いインスタンスは削除され、提供された構成を使用して新しいインスタンスが作成されます。
curl -X POST -H 'Content-type: application/json' -d '{
"update":{
"name": "collections-repair-listener",
"class": "org.apache.solr.cluster.events.impl.CollectionsRepairEventListener",
"config":{
"waitForSecond": 30
}}}'
https://127.0.0.1:8983/api/cluster/plugin