クラスタとノードの管理コマンド

クラスタとは、相互に連携して動作する Solr ノードのセットです。

これらの API コマンドは、SolrCloud クラスタ全体レベル、または個々のノードで動作します。

CLUSTERSTATUS: クラスタステータス

コレクション、シャード、レプリカ、構成名、コレクションエイリアス、クラスタプロパティなど、クラスタステータスをフェッチします。

さらに、このコマンドは、コレクションの動作状態を監視しやすくするために、各コレクションとシャードの health ステータスを報告します。次のヘルス状態の値が定義されており、アクティブなレプリカの割合 (active) に基づいて、最良から最悪の順に並べられています。

GREEN

active == 100%、すべてのレプリカがアクティブで、シャードリーダーが存在します。

YELLOW

100% > active > 50%、かつシャードリーダーが存在します。

ORANGE

50% >= active > 0%、かつシャードリーダーが存在します。

RED

アクティブなレプリカがないまたはシャードリーダーが存在しません。

コレクションのヘルス状態は、任意のシャードの最悪の状態として報告されます。たとえば、1つの YELLOW を除くすべてのシャードが GREEN であるコレクションの場合、コレクションのヘルスは YELLOW として報告されます。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERSTATUS

V2 API

curl -X GET https://127.0.0.1:8983/api/cluster

CLUSTERSTATUS パラメータ

collection

オプション

デフォルト: なし

情報が要求されるコレクションまたはエイリアス名。省略すると、クラスタ内のすべてのコレクションの情報が返されます。エイリアスが指定された場合、エイリアス内のコレクションに関する情報が返されます。

shard

オプション

デフォルト: なし

情報が要求されるシャード。複数のシャード名をコンマ区切りのリストとして指定できます。

_route_

オプション

デフォルト: なし

特定のドキュメントが属するシャードの詳細が必要で、どのシャードに属しているかわからない場合に使用できます。

CLUSTERSTATUS レスポンス

レスポンスには、リクエストのステータスとクラスタのステータスが含まれます。

CLUSTERSTATUS の使用例

入力

https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERSTATUS

出力

{
  "responseHeader":{
    "status":0,
    "QTime":333},
  "cluster":{
    "collections":{
      "collection1":{
        "shards":{
          "shard1":{
            "range":"80000000-ffffffff",
            "state":"active",
            "health": "GREEN",
            "replicas":{
              "core_node1":{
                "state":"active",
                "core":"collection1",
                "node_name":"127.0.1.1:8983_solr",
                "base_url":"http://127.0.1.1:8983/solr",
                "leader":"true"},
              "core_node3":{
                "state":"active",
                "core":"collection1",
                "node_name":"127.0.1.1:8900_solr",
                "base_url":"http://127.0.1.1:8900/solr"}}},
          "shard2":{
            "range":"0-7fffffff",
            "state":"active",
            "health": "GREEN",
            "replicas":{
              "core_node2":{
                "state":"active",
                "core":"collection1",
                "node_name":"127.0.1.1:7574_solr",
                "base_url":"http://127.0.1.1:7574/solr",
                "leader":"true"},
              "core_node4":{
                "state":"active",
                "core":"collection1",
                "node_name":"127.0.1.1:7500_solr",
                "base_url":"http://127.0.1.1:7500/solr"}}}},
        "router":{"name":"compositeId"},
        "replicationFactor":"1",
        "znodeVersion": 11,
        "autoCreated":"true",
        "configName" : "my_config",
        "health": "GREEN",
        "aliases":["both_collections"]
      },
      "collection2":{
        "..."
      }
    },
    "aliases":{ "both_collections":"collection1,collection2" },
    "roles":{
      "overseer":[
        "127.0.1.1:8983_solr",
        "127.0.1.1:7574_solr"]
    },
    "live_nodes":[
      "127.0.1.1:7574_solr",
      "127.0.1.1:7500_solr",
      "127.0.1.1:8983_solr",
      "127.0.1.1:8900_solr"]
  }
}

CLUSTERPROP: クラスタプロパティ

クラスタ全体のプロパティを追加、編集、または削除します。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERPROP&name=urlScheme&val=https

V2 API

curl -X POST https://127.0.0.1:8983/api/cluster -H 'Content-Type: application/json' -d '
  {
    "set-property": {
      "name": "urlScheme",
      "val": "https"
    }
  }
'

CLUSTERPROP パラメータ

name

オプション

デフォルト: なし

プロパティの名前。サポートされているプロパティ名は、locationmaxCoresPerNodeurlScheme、およびdefaultShardPreferencesです。Jaegerトレーシングモジュールが有効になっている場合は、プロパティsamplePercentageも使用可能です。

他のプロパティを設定することもできます(たとえば、カスタムプラグインに必要な場合)。ただし、それらはプレフィックスext.で始まる必要があります。ext.で始まらない不明なプロパティは拒否されます。

val

オプション

デフォルト: なし

プロパティの値。値が空またはnullの場合、プロパティは設定解除されます。

CLUSTERPROPレスポンス

レスポンスには、リクエストのステータスと、更新または削除されたプロパティが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

CLUSTERPROPの使用例

入力

https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERPROP&name=urlScheme&val=https&wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
</response>

クラスタ全体のデフォルトの設定

defaultsパラメーターを使用して、コレクションの特定の属性にクラスタ全体のデフォルト値を設定できます。

デフォルト値の設定/更新

V1 API

このアクションに相当するV1はありません。

V2 API

curl -X POST -H 'Content-type:application/json' --data-binary '
{
  "set-obj-property": {
    "defaults" : {
      "collection": {
        "numShards": 2,
        "nrtReplicas": 1,
        "tlogReplicas": 1,
        "pullReplicas": 1
      }
    }
  }
}' https://127.0.0.1:8983/api/cluster

nrtReplicasの唯一の値を設定解除

curl -X POST -H 'Content-type:application/json' --data-binary '
{
  "set-obj-property": {
    "defaults" : {
      "collection": {
        "nrtReplicas": null
      }
    }
  }
}' https://127.0.0.1:8983/api/cluster

defaultsのすべての値を設定解除

curl -X POST -H 'Content-type:application/json' --data-binary '
{ "set-obj-property" : {
    "defaults" : null
}' https://127.0.0.1:8983/api/cluster

デフォルトのシャードプリファレンス

defaultShardPreferencesパラメーターを使用すると、ラックまたはアベイラビリティゾーンの認識を実装できます。最初に、システムプロパティ(例:-Drack=rack1)を使用してノードに「ラベル」を付けます。次に、defaultShardPreferencesの値をnode.sysprop:sysprop.YOUR_PROPERTY_NAMEのように設定します。

curl -X POST -H 'Content-type:application/json' --data-binary '
{
  "set-property" : {
    "name" : "defaultShardPreferences",
    "val" : "node.sysprop:sysprop.rack"
  }
}' https://127.0.0.1:8983/api/cluster

この時点で、例えばrack=rack1を持つノードでクエリを実行すると、Solrはrack1からのレプリカのみをヒットしようとします。

レプリカのバランス

均衡に達するまで、指定されたSolrノードのセット全体でレプリカをシャッフルします。

構成されたレプリカ配置プラグインを使用して、次を決定します。

  • バランシングのためにどのレプリカを移動する必要があるか

  • それらのレプリカをどのノードに配置する必要があるか

  • クラスタが「均衡」に達したとき

V2 API

curl -X POST https://127.0.0.1:8983/api/cluster/replicas/balance -H 'Content-Type: application/json' -d '
  {
    "nodes": ["localhost:8983_solr", "localhost:8984_solr"],
    "async": "balance-replicas-1"
  }
'

パラメーター

nodes

オプション

デフォルト: なし

レプリカのバランスをとるノード。このノードセットの外部にあるレプリカは、バランシングに含まれません。

このパラメーターが指定されていない場合、すべてのライブデータノードが使用されます。

waitForFinalState

オプション

デフォルト: false

trueの場合、影響を受けるすべてのレプリカがアクティブになった場合にのみ、リクエストは完了します。falseの場合、APIは、影響を受けるリーダーレプリカなど、最小限のレプリカがアクティブになったときに戻ります。

async

オプション

デフォルト: なし

このアクションを追跡するためのリクエストID。これは非同期で処理されます。

BalanceReplicasレスポンス

レスポンスには、リクエストのステータスが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

この操作は、ソースノードに属するレプリカに必要なロックを保持しません。したがって、この期間中に他のコレクション操作を実行しないでください。

BALANCESHARDUNIQUE:ノード間でプロパティをバランス

特定のプロパティが、コレクションを構成する物理ノード間で均等に分散されるようにします。プロパティが既にレプリカに存在する場合、可能な限りその場所に残すように努力します。プロパティがシャード上のどのレプリカにもない場合、1つが選択され、プロパティが追加されます。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=techproducts&property=preferredLeader

V2 API

curl -X POST https://127.0.0.1:8983/api/collections/techproducts/balance-shard-unique -H 'Content-Type: application/json' -d '
  {
    "property": "preferredLeader"
  }
'

BALANCESHARDUNIQUEパラメーター

collection

必須

デフォルト: なし

プロパティをバランスさせるコレクションの名前。

property

必須

デフォルト: なし

バランスさせるプロパティ。リテラルのproperty.が明示的に指定されていない場合、このプロパティの先頭に追加されます。

onlyactivenodes

オプション

デフォルト: true

通常、プロパティはアクティブなノードでのみインスタンス化されます。このパラメーターがfalseとして指定されている場合、非アクティブなノードも分散に含まれます。

shardUnique

オプション

デフォルト: なし

ある種の安全弁。この値をデフォルトでtrueにする事前定義されたプロパティ(preferredLeader)が1つあります。バランスされる他のすべてのプロパティについては、これをtrueに設定する必要があります。そうしないとエラーメッセージが返されます。

BALANCESHARDUNIQUEレスポンス

レスポンスには、リクエストのステータスが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

BALANCESHARDUNIQUEの使用例

入力

これらのコマンドのいずれかを実行すると、「preferredLeader」プロパティが「collection1」コレクションのすべてのシャードの1つのレプリカに配置されます。

https://127.0.0.1:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=collection1&property=preferredLeader&wt=xml

https://127.0.0.1:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=collection1&property=property.preferredLeader&wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">9</int>
  </lst>
</response>

この呼び出しを発行した後のクラスター状態を調べると、このプロパティを持つ各シャードに正確に1つのレプリカが表示されるはずです。

レプリカの移行

指定されたソースノードのセットからすべてのレプリカを移行します。

+ 複数のノードがtargetNodeとして使用されている場合(明示的またはデフォルトで)、構成されたレプリカ配置プラグインを使用して、移行された各レプリカに使用するtargetNodeを決定します。

V2 API

curl -X POST https://127.0.0.1:8983/api/cluster/replicas/migrate -H 'Content-Type: application/json' -d '
  {
    "sourceNodes": ["localhost:8983_solr", "localhost:8984_solr"],
    "targetNodes": ["localhost:8985_solr", "localhost:8986_solr"],
    "async": "migrate-replicas-1"
  }
'

パラメーター

sourceNodes

必須

デフォルト: なし

レプリカのバランスをとるノード。このノードセットの外部にあるレプリカは、バランシングに含まれません。

targetNodes

オプション

デフォルト: なし

移行されたレプリカが移動されるノード。指定されていない場合、APIはsourceNodesにないすべてのライブノードを使用します。

レプリカの移行先ノードが複数ある場合、構成されたPlacementPluginレプリカはこれらのノードの1つを選択します

waitForFinalState

オプション

デフォルト: false

trueの場合、影響を受けるすべてのレプリカがアクティブになった場合にのみ、リクエストは完了します。falseの場合、APIは、影響を受けるリーダーレプリカなど、最小限のレプリカがアクティブになったときに戻ります。

async

オプション

デフォルト: なし

このアクションを追跡するためのリクエストID。これは非同期で処理されます。

MigrateReplicasレスポンス

レスポンスには、リクエストのステータスが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

この操作は、ソースノードに属するレプリカに必要なロックを保持しません。したがって、この期間中に他のコレクション操作を実行しないでください。

REPLACENODE:ノード内のすべてのレプリカを別のノードに移動

このAPIの機能はレプリカの移行によって置き換えられ、強化されました。代わりに新しいAPIを使用することを検討してください。このAPIは将来のバージョンで削除される可能性があります。

このコマンドは、あるノード(ソース)のレプリカを別のノード(ターゲット)で再作成します。各レプリカがコピーされた後、ソースノードのレプリカが削除されます。

シャードリーダーでもあるソースレプリカの場合、操作は、timeoutパラメーターで設定された秒数だけ待機して、リーダーになることができるアクティブなレプリカ(既存のレプリカがリーダーになるか、新しいレプリカがリカバリを完了してリーダーになる)があることを確認します。

targetNodeが提供されていない場合、構成されたレプリカ配置プラグインを使用して、再作成された各レプリカを配置するノードを決定します。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=REPLACENODE&sourceNode=source-node&targetNode=target-node

V2 API

curl -X POST "https://127.0.0.1:8983/api/cluster/nodes/localhost:7574_solr/replace" -H 'Content-Type: application/json' -d '
    {
      "targetNodeName": "localhost:8983_solr",
      "waitForFinalState": "false",
      "async": "async"
    }
'

REPLACENODEパラメーター

sourceNode

必須

デフォルト: なし

レプリカのコピー元となるソースノード。

targetNode

オプション

デフォルト: なし

レプリカがコピーされるターゲットノード。このパラメーターが指定されていない場合、SolrはsourceNodeを除くすべてのライブノードを使用します。構成されたレプリカ配置プラグインを使用して、各レプリカに使用されるノードを決定します。

parallel

オプション

デフォルト: false

このフラグがtrueに設定されている場合、すべてのレプリカは別のスレッドで作成されます。レプリカのインデックスが非常に大きい場合、これによりネットワークとディスクI/Oが非常に高くなる可能性があることに注意してください。

waitForFinalState

オプション

デフォルト: false

trueの場合、影響を受けるすべてのレプリカがアクティブになった場合にのみ、リクエストは完了します。falseの場合、APIは、影響を受けるリーダーレプリカなど、最小限のレプリカがアクティブになったときに戻ります。

async

オプション

デフォルト: なし

このアクションを追跡するためのリクエストID。これは非同期で処理されます。

timeout

オプション

デフォルト: 300

新しいレプリカが作成され、リーダーレプリカが完全に回復するまで待機する時間(秒単位)。

この操作は、ソースノードに属するレプリカに必要なロックを保持しません。したがって、この期間中に他のコレクション操作を実行しないでください。

DELETENODE:ノード内のレプリカを削除

そのノードにあるすべてのコレクションのすべてのレプリカを削除します。この操作後もノード自体はライブノードとして残ることに注意してください。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=DELETENODE&node=nodeName

V2 API

curl -X POST "https://127.0.0.1:8983/api/cluster/nodes/localhost:7574_solr/clear/" -H 'Content-Type: application/json' -d '
    {
      "async": "someAsyncId"
    }
'

DELETENODEパラメーター

node

必須

デフォルト: なし

削除するノード。

async

オプション

デフォルト: なし

このアクションを追跡するためのリクエストID。これは非同期で処理されます。

ADDROLE:役割の追加

クラスタ内の特定のノードに役割を割り当てます。唯一サポートされている役割はoverseerです。

このコマンドを使用して、特定のノードをOverseerとして専用にします。複数回呼び出して、より多くのノードを追加します。これは、Overseerが過負荷になる可能性が高い大規模なクラスターで役立ちます。利用可能な場合は、「overseer」の役割が割り当てられているノードのリストの中から1つがoverseerになります。指定されたノードが起動して実行されていない場合、システムは役割を他のノードに割り当てます。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=ADDROLE&role=overseer&node=localhost:8983_solr

V2 API

curl -X POST https://127.0.0.1:8983/api/cluster -H 'Content-Type: application/json' -d '
  {
    "add-role": {
      "role": "overseer",
      "node": "localhost:8983_solr"
    }
  }
'

ADDROLEパラメーター

role

必須

デフォルト: なし

役割の名前。現在サポートされている唯一の役割はoverseerです。

node

必須

デフォルト: なし

役割が割り当てられるノードの名前。そのノードが開始される前でも役割を割り当てることができます。

ADDROLEレスポンス

レスポンスには、リクエストのステータスと、更新または削除されたプロパティが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

ADDROLEの使用例

入力

https://127.0.0.1:8983/solr/admin/collections?action=ADDROLE&role=overseer&node=192.167.1.2:8983_solr&wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
</response>

REMOVEROLE:役割の削除

割り当てられた役割を削除します。このAPIは、ADDROLE操作を使用して割り当てられた役割を元に戻すために使用されます

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=REMOVEROLE&role=overseer&node=localhost:8983_solr

V2 API

curl -X POST https://127.0.0.1:8983/api/cluster -H 'Content-Type: application/json' -d '
  {
    "remove-role": {
      "role": "overseer",
      "node": "localhost:8983_solr"
    }
  }
'

REMOVEROLEパラメーター

role

必須

デフォルト: なし

役割の名前。現在サポートされている唯一の役割はoverseerです。

node

必須

デフォルト: なし

役割を削除するノードの名前。

REMOVEROLEレスポンス

レスポンスには、リクエストのステータスと、更新または削除されたプロパティが含まれます。ステータスが「0」以外の場合、エラーメッセージでリクエストが失敗した理由が説明されます。

REMOVEROLEの使用例

入力

https://127.0.0.1:8983/solr/admin/collections?action=REMOVEROLE&role=overseer&node=192.167.1.2:8983_solr&wt=xml

出力

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
</response>

OVERSEERSTATUS:Overseerのステータスと統計

overseerの現在のステータス、さまざまなoverseer APIのパフォーマンス統計、および操作タイプごとの過去10件の失敗を返します。

V1 API

https://127.0.0.1:8983/solr/admin/collections?action=OVERSEERSTATUS

V2 API

curl -X GET https://127.0.0.1:8983/api/cluster/overseer

OVERSEERSTATUSの使用例

入力

https://127.0.0.1:8983/solr/admin/collections?action=OVERSEERSTATUS
{
  "responseHeader":{
    "status":0,
    "QTime":33},
  "leader":"127.0.1.1:8983_solr",
  "overseer_queue_size":0,
  "overseer_work_queue_size":0,
  "overseer_collection_queue_size":2,
  "overseer_operations":[
    "createcollection",{
      "requests":2,
      "errors":0,
      "avgRequestsPerSecond":0.7467088842794136,
      "5minRateRequestsPerSecond":7.525069023276674,
      "15minRateRequestsPerSecond":10.271274280947182,
      "avgTimePerRequest":0.5050685,
      "medianRequestTime":0.5050685,
      "75thPcRequestTime":0.519016,
      "95thPcRequestTime":0.519016,
      "99thPcRequestTime":0.519016,
      "999thPcRequestTime":0.519016},
    "removeshard",{
      "..."
  }],
  "collection_operations":[
    "splitshard",{
      "requests":1,
      "errors":1,
      "recent_failures":[{
          "request":{
            "operation":"splitshard",
            "shard":"shard2",
            "collection":"example1"},
          "response":[
            "Operation splitshard caused exception:","org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: No shard with the specified name exists: shard2",
            "exception",{
              "msg":"No shard with the specified name exists: shard2",
              "rspCode":400}]}],
      "avgRequestsPerSecond":0.8198143044809885,
      "5minRateRequestsPerSecond":8.043840552427673,
      "15minRateRequestsPerSecond":10.502079828515368,
      "avgTimePerRequest":2952.7164175,
      "medianRequestTime":2952.7164175000003,
      "75thPcRequestTime":5904.384052,
      "95thPcRequestTime":5904.384052,
      "99thPcRequestTime":5904.384052,
      "999thPcRequestTime":5904.384052},
    "..."
  ],
  "overseer_queue":[
    "..."
  ],
  "..."
 }