集群和节点管理命令

集群是一组协同操作的 Solr 节点。

这些 API 命令在整个集群级别或单个节点上与 SolrCloud 集群配合使用。

CLUSTERSTATUS:集群状态

获取集群状态,包括集合、分片、副本、配置名称以及集合别名和集群属性。

此外,此命令报告每个集合和分片的健康状态,以便更轻松地监视集合的操作状态。根据活动副本的百分比 (active) 定义以下健康状态值,从最佳到最差排序:

GREEN

active == 100%,所有副本均处于活动状态,并且有分片领导者。

YELLOW

100% > active > 50%,并且有分片领导者。

ORANGE

50% >= active > 0%,并且有分片领导者。

RED

没有活动副本没有分片领导者。

集合健康状态报告为任何分片的最低状态,例如,对于除一个 YELLOW 外所有分片均为 GREEN 的集合,集合健康状态将报告为 YELLOW。

V1 API

http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS

V2 API

curl -X GET http://localhost:8983/api/cluster

CLUSTERSTATUS 参数

collection

可选

默认值:无

请求信息的集合或别名名称。如果省略,将返回集群中所有集合的信息。如果提供别名,将返回别名中集合的信息。

shard

可选

默认值:无

请求信息的碎片。多个分片名称可以用逗号分隔的列表指定。

_route_

可选

默认值:无

如果你需要特定文档所属的分片详细信息,并且不知道它属于哪个分片,可以使用此方法。

CLUSTERSTATUS 响应

响应将包括请求状态和集群状态。

使用 CLUSTERSTATUS 的示例

输入

http://localhost: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

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

V2 API

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

CLUSTERPROP 参数

name

可选

默认值:无

属性的名称。支持的属性名称为 locationmaxCoresPerNodeurlSchemedefaultShardPreferences。如果已启用 Jaeger 跟踪模块,则属性 samplePercentage 也可用。

可以设置其他属性(例如,如果您需要它们用于自定义插件),但它们必须以前缀 ext. 开头。不以 ext. 开头的未知属性将被拒绝。

val

可选

默认值:无

属性的值。如果该值为空或为 null,则该属性将取消设置。

CLUSTERPROP 响应

该响应将包括请求的状态以及已更新或已删除的属性。如果状态不是“0”,则错误消息将说明请求失败的原因。

使用 CLUSTERPROP 的示例

输入

http://localhost: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
      }
    }
  }
}' http://localhost:8983/api/cluster

取消设置 nrtReplicas 的唯一值

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

取消设置 defaults 中的所有值

curl -X POST -H 'Content-type:application/json' --data-binary '
{ "set-obj-property" : {
    "defaults" : null
}' http://localhost: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"
  }
}' http://localhost:8983/api/cluster

此时,如果您在具有例如 rack=rack1 的节点上运行查询,Solr 将尝试仅命中来自 rack1 的副本。

平衡副本

在给定的 Solr 节点集上随机播放副本,直到达到平衡。

将使用已配置的 副本放置插件 来决定

  • 平衡需要移动哪些副本

  • 将这些副本放置在哪些节点上

  • 集群达到“平衡”时

V2 API

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

参数

节点

可选

默认值:无

将在其上平衡副本的节点。不在此节点集之外的副本将不会包含在平衡中。

如果未提供此参数,将使用所有活动数据节点。

waitForFinalState

可选

默认值:false

如果为 true,则仅当所有受影响的副本都变为活动状态时,请求才会完成。如果为 false,则 API 将在最少副本处于活动状态时返回,例如受影响的领导者副本。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将 异步处理

BalanceReplicas 响应

响应将包括请求的状态。如果状态不是“0”,则错误消息将解释请求失败的原因。

此操作不会对属于源节点的副本保持必要的锁。因此,在此期间不要执行其他集合操作。

BALANCESHARDUNIQUE:在节点之间平衡属性

确保特定属性在构成集合的物理节点之间均匀分布。如果属性已存在于副本上,则会尽一切努力将其保留在那里。如果属性不在分片上的任何副本上,则选择一个并添加该属性。

V1 API

http://localhost:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=techproducts&property=preferredLeader

V2 API

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

BALANCESHARDUNIQUE 参数

collection

必需

默认值:无

要平衡属性的集合的名称。

属性

必需

默认值:无

要平衡的属性。如果未明确指定,则在该属性之前添加文字 property.

onlyactivenodes

可选

默认值:true

通常,该属性仅在活动节点上实例化。如果此参数指定为 false,则非活动节点也将包含在分布中。

shardUnique

可选

默认值:无

某种安全阀。有一个预定义的属性 (preferredLeader) 将此值默认为 true。对于平衡的所有其他属性,必须将其设置为 true,否则将返回错误消息。

BALANCESHARDUNIQUE 响应

响应将包括请求的状态。如果状态不是“0”,则错误消息将解释请求失败的原因。

使用 BALANCESHARDUNIQUE 的示例

输入

以下任一命令都会将“preferredLeader”属性放在“collection1”集合中每个分片的一个副本上。

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

http://localhost: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>

在发出此调用后检查集群状态应显示每个分片中只有一个具有此属性的副本。

迁移副本

将所有副本从给定的源节点集迁移出去。

+ 如果将多个节点用作目标节点(显式或默认),则将使用已配置的 副本放置插件 来确定应为每个已迁移副本使用哪个目标节点。

V2 API

curl -X POST http://localhost: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 副本将选择其中一个节点

waitForFinalState

可选

默认值:false

如果为 true,则仅当所有受影响的副本都变为活动状态时,请求才会完成。如果为 false,则 API 将在最少副本处于活动状态时返回,例如受影响的领导者副本。

async

可选

默认值:无

请求 ID,用于跟踪此操作,该操作将 异步处理

MigrateReplicas 响应

响应将包括请求的状态。如果状态不是“0”,则错误消息将解释请求失败的原因。

此操作不会对属于源节点的副本保持必要的锁。因此,在此期间不要执行其他集合操作。

REPLACENODE:将节点中的所有副本移至另一个节点

此 API 的功能已被 Migrate Replicas 替代并增强,请考虑改用新的 API,因为此 API 可能会在将来的版本中被移除。

此命令在另一个节点(目标)上重新创建了一个节点(源)中的副本。复制每个副本后,将删除源节点中的副本。

对于也是分片领导者的源副本,操作将等待使用 timeout 参数设置的秒数,以确保有一个可以成为领导者的活动副本,无论是现有副本成为领导者还是新副本完成恢复并成为领导者)。

如果未提供 targetNode,则将使用已配置的 副本放置插件 来确定应将每个重新创建的副本放置在哪个节点上。

V1 API

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

V2 API

curl -X POST "http://localhost: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

http://localhost:8983/solr/admin/collections?action=DELETENODE&node=nodeName

V2 API

curl -X POST "http://localhost: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”角色的节点列表中的一个节点将成为 overseer。如果未启动和运行任何指定节点,系统会将角色分配给任何其他节点。

V1 API

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

V2 API

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

ADDROLE 参数

role

必需

默认值:无

角色的名称。目前唯一受支持的角色是 overseer

node

必需

默认值:无

将分配角色的节点的名称。即使在该节点启动之前,也可以分配角色。

ADDROLE 响应

该响应将包括请求的状态以及已更新或已删除的属性。如果状态不是“0”,则错误消息将说明请求失败的原因。

使用 ADDROLE 的示例

输入

http://localhost: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

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

V2 API

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

REMOVEROLE 参数

role

必需

默认值:无

角色的名称。目前唯一受支持的角色是 overseer

node

必需

默认值:无

应移除角色的节点的名称。

REMOVEROLE 响应

该响应将包括请求的状态以及已更新或已删除的属性。如果状态不是“0”,则错误消息将说明请求失败的原因。

使用 REMOVEROLE 的示例

输入

http://localhost: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

http://localhost:8983/solr/admin/collections?action=OVERSEERSTATUS

V2 API

curl -X GET http://localhost:8983/api/cluster/overseer

使用 OVERSEERSTATUS 的示例

输入

http://localhost: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":[
    "..."
  ],
  "..."
 }