副本管理命令

副本是分片的物理副本。副本通过提供数据的其他副本增强故障转移,并通过为搜索提供其他容量增强可扩展性。

本节中的所有示例都假设您正在运行“techproducts”Solr 示例

bin/solr -c -e techproducts

ADDREPLICA:添加副本

向集合中的分片添加一个或多个副本。如果要在特定节点中创建副本,则可以指定节点名称。否则,可以指定一组节点,系统将从这些节点中选择最合适的节点来创建副本。

V1 API

输入

http://localhost:8983/solr/admin/collections?action=ADDREPLICA&collection=techproducts&shard=shard1&node=localhost:8983_solr

输出

{
  "responseHeader":{
    "status":0,
    "QTime":482},
  "success":{
    "localhost:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":396},
      "core":"techproducts_shard1_replica_n3"}}}

V2 API 输入

curl -X POST http://localhost:8983/api/collections/techproducts/shards/shard1/replicas -H 'Content-Type: application/json' -d '
  {
    "node":"localhost:8983_solr"
  }
'

输出

{
  "responseHeader":{
    "status":0,
    "QTime":820},
  "success":{
    "localhost:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":473},
      "core":"techproducts_shard1_replica_n11"}}}

ADDREPLICA 参数

collection

必需

默认值:无

应创建副本的集合名称。

shard

可选

默认值:无

要向其添加副本的分片名称。

如果未指定shard,则必须指定_route_

_route_ (v1)、route (v2)

可选

默认值:无

如果不知道确切的分片名称,用户可以传递_route_值,系统将识别分片的名称。

如果还指定了shard参数,则忽略此参数。

node

可选

默认值:无

应创建副本的节点名称。

createNodeSet (v1)、nodeSet (v2)

可选

默认值:无

新创建副本的放置候选节点。

在 v1 请求中以逗号分隔的节点名称列表形式提供,例如localhost:8983_solr,localhost:8984_solr,localhost:8985_solr。在 v2 请求中,nodeSet期望值采用真正的列表形式,例如["localhost:8983_solr", "localhost:8984_solr", "localhost:8985_solr"]

如果未指定nodecreateNodeSet/nodeSet,则会从群集中所有活动节点中选择最佳节点。
instanceDir

可选

默认值:无

将创建的核心实例目录。

dataDir

可选

默认值:无

应创建核心的目录。

type

可选

默认值:nrt

要创建的副本类型。允许以下可能值

  • nrt:NRT 类型维护事务日志并在本地更新其索引。

  • tlog:TLOG 类型维护事务日志,但仅通过复制更新其索引。

  • pull:PULL 类型不维护事务日志,并且仅通过复制更新其索引。此类型无资格成为领导者。

    有关副本类型选项的更多信息,请参阅 副本类型 部分。

nrtReplicas

可选

默认值:参见说明

应创建的 nrt 副本数。如果 typenrt,则默认为 1,否则为 0

tlogReplicas

可选

默认值:参见说明

应创建的 tlog 副本数。如果 typetlog,则默认为 1,否则为 0

pullReplicas

可选

默认值:参见说明

应创建的 pull 副本数。如果 typepull,则默认为 1,否则为 0

property.name=value

可选

默认值:无

用作在创建的核心中作为附加属性的名称/值对。有关受支持的属性和值的详细信息,请参阅 核心发现

每个 core.properties 文件中的条目对于 Solr 正确运行至关重要。覆盖条目可能会导致无法使用的集合。通过指定 property.name=value 更改这些条目是一种专家级选项,只有在您透彻了解后果的情况下才应使用。

waitForFinalState

可选

默认值:false

如果为 true,则只有在所有受影响的副本变为活动状态时,请求才会完成。如果为 false,API 将返回单个操作的状态,该状态可能在新副本联机并处于活动状态之前。

async

可选

默认值:无

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

使用 ADDREPLICA 的其他示例

输入

为“gettingstarted”集合创建一个副本,其中包含一个 PULL 副本和一个 TLOG 副本。

http://localhost:8983/solr/admin/collections?action=addreplica&collection=gettingstarted&shard=shard1&tlogReplicas=1&pullReplicas=1

输出

{
    "responseHeader": {
        "status": 0,
        "QTime": 784
    },
    "success": {
        "127.0.1.1:7574_solr": {
            "responseHeader": {
                "status": 0,
                "QTime": 257
            },
            "core": "gettingstarted_shard1_replica_p11"
        },
        "127.0.1.1:8983_solr": {
            "responseHeader": {
                "status": 0,
                "QTime": 295
            },
            "core": "gettingstarted_shard1_replica_t10"
        }
    }
}

MOVEREPLICA:将副本移动到新节点

此命令通过在目标上执行 ADDREPLICA,然后在源上执行 DELETEREPLICA,将副本从一个节点移动到另一个节点。如果在 ADDREPLICA 操作在活动状态下生成副本之前此命令中断或超时,则不会发生 DELETEREPLICA。超时不会取消 ADDREPLICA,并且会导致额外的分片。在共享文件系统的情况下,将重用 dataDir

如果在同一节点上存在来自同一分片的多个副本的集合上使用此命令,并且shardsourceNode参数与多个副本匹配,则所选副本不是确定性的(当前是随机的)。

V1 API

输入

http://localhost:8983/solr/admin/collections?action=MOVEREPLICA&collection=test&targetNode=localhost:8983_solr&replica=core_node6

输出

{
    "responseHeader": {
        "status": 0,
        "QTime": 3668
    },
    "success": "MOVEREPLICA action completed successfully, moved replica=test_shard1_replica_n5 at node=localhost:8982_solr to replica=test_shard1_replica_n7 at node=localhost:8983_solr"
}

V2 API 输入

curl -X POST http://localhost:8983/api/collections/techproducts -H 'Content-Type: application/json' -d '
  {
    "move-replica":{
      "replica":"core_node6",
      "targetNode": "localhost:8983_solr"
    }
  }
'

输出

{
    "responseHeader": {
        "status": 0,
        "QTime": 3668
    },
    "success": "MOVEREPLICA action completed successfully, moved replica=test_shard1_replica_n5 at node=localhost:8982_solr to replica=test_shard1_replica_n7 at node=localhost:8983_solr"
}

MOVEREPLICA 参数

collection

必需

默认值:无

集合的名称。

targetNode

必需

默认值:无

目标节点的名称。

sourceNode

可选

默认值:无

包含要移动的副本的节点的名称。除非指定了replica,否则此参数是必需的。如果指定了replica,则此参数将被忽略。

shard

可选

默认值:无

应为其移动副本的分片名称。除非指定了replica,否则此参数是必需的。如果指定了replica,则此参数将被忽略。

replica

可选

默认值:无

要移动的副本的名称。除非指定了shardsourceNode,否则此参数是必需的,但是此参数优先于这两个参数。

timeout

可选

默认值:600

在删除旧位置的副本之前,等待副本在新位置中处于活动状态的秒数。如果超时,则不会发生删除,也不会回滚创建,可能会留下一个额外的副本。目前,如果副本是 hdfs 副本,则此参数将被忽略。

inPlaceMove

可选

默认值:true

对于使用共享文件系统的副本,允许“就地”移动,该移动会重复使用共享数据。默认为true,但如果副本不具有值为true的属性shared_storage,则此参数将被忽略。

async

可选

默认值:无

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

DELETEREPLICA:删除副本

允许删除一个或多个副本。可以多种方式指定要删除的副本

  1. 如果同时提供了关联的集合、分片和副本名称,则可以删除单个特定副本。

  2. 如果提供了关联的集合和分片名称以及要删除的副本的count,则可以从特定分片中删除多个副本。

  3. 如果提供了关联的集合名称以及要删除的副本的count,则可以从集合中的所有分片中删除多个副本。

在删除多个副本时,Solr 会选择处于活动状态、是最新的并且当前不是领导者的副本。

对于每个要删除的副本,如果相应的核心正在运行,则卸载该核心,从集群状态中删除该条目,并且(默认情况下)删除 instanceDir 和 dataDir。如果副本底层核心已关闭,则该条目将从集群状态中移除,并且如果核心稍后启动,则会自动注销。

V1 API

http://localhost:8983/solr/admin/collections?action=DELETEREPLICA&collection=techproducts&shard=shard1&replica=core_node2

V2 API

v2 API 具有三个不同的副本删除端点,具体取决于副本的指定方式。

按名称删除副本

curl -X DELETE http://localhost:8983/api/collections/techproducts/shards/shard1/replicas/core_node2

从单个分片中删除指定数量的(未命名)副本

curl -X DELETE "http://localhost:8983/api/collections/techproducts/shards/shard1/replicas?count=3"

从所有分片中删除指定数量的(未命名)副本

curl -X PUT -H "Content-type: application/json" "http://localhost:8983/api/collections/techproducts/scale" -d '
  {
    "count": 3
  }
'

DELETEREPLICA 参数

collection

必需

默认值:无

集合的名称。分别在 v1 和 v2 请求中作为查询参数或路径参数提供。

shard

必需

默认值:无

包含要删除的副本的分片名称。分别在 v1 和 v2 请求中作为查询参数或路径参数提供。

replica

可选

默认值:无

要删除的副本的名称。分别在 v1 和 v2 请求中作为查询参数或路径参数提供。

如果改用 count,则不需要此参数。否则,必须提供此参数。

count

可选

默认值:无

要删除的副本数量。如果请求的数量超过副本的数量,则不会删除任何副本。如果只有一个副本,则不会将其删除。

如果改用 replica,则不需要此参数。否则,必须提供此参数。

deleteInstanceDir

可选

默认值:true

默认情况下,Solr 将删除要删除的副本的整个 instanceDir。将其设置为 false 以防止删除实例目录。

deleteDataDir

可选

默认值:true

默认情况下,Solr 将删除要删除的副本的 dataDir。将其设置为 false 以防止删除数据目录。

deleteIndex

可选

默认值:true

默认情况下,Solr 将删除要删除的副本的索引。将其设置为 false 以防止删除索引目录。

onlyIfDown

可选

默认值:false

设置为 true 时,如果副本处于活动状态,则不执行任何操作。

followAliases

可选

默认值:false

允许将集合参数视为要解析的实际集合名称的别名的标志。

async

可选

默认值:无

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

ADDREPLICAPROP:添加副本属性

为特定副本分配一个任意属性,并赋予其指定的值。如果该属性已存在,它将被新值覆盖。

V1 API

输入

http://localhost:8983/solr/admin/collections?action=ADDREPLICAPROP&collection=techproducts&shard=shard1&replica=core_node2&property=preferredLeader&property.value=true

V2 API 输入

curl -X PUT http://localhost:8983/api/collections/techproducts/shards/shard1/replicas/core_node2/properties/preferredLeader -H 'Content-Type: application/json' -d '
  {
    "value": "true"
  }
'

ADDREPLICAPROP 参数

collection

必需

默认值:无

副本所属集合的名称。

shard

必需

默认值:无

副本所属分片的名称。

replica

必需

默认值:无

副本,例如 core_node1

property

必需

默认值:无

要添加的属性的名称。

这将具有前缀 property. 以将其与系统维护的属性区分开来。因此,这两个形式是等效的

property=special

property=property.special

property.value

必需

默认值:无

要分配给该属性的值。

shardUnique

可选

默认值:false

如果 true,则在其中一个副本中设置此属性将从该分片中的所有其他副本中删除该属性。默认值为 false

有一个预定义的属性 preferredLeader,其中 shardUnique 强制为 true,如果 shardUnique 显式设置为 false,则会返回错误。

preferredLeader 是一个布尔属性。分配的任何值(不区分大小写)不等于 true,都将被解释为 preferredLeaderfalse

ADDREPLICAPROP 响应

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

使用 ADDREPLICAPROP 的其他示例

输入

这对命令将分别为同一分片中的两个节点将“testprop”属性(property.testprop)设置为“value1”和“value2”。

http://localhost:8983/solr/admin/collections?action=ADDREPLICAPROP&shard=shard1&collection=collection1&replica=core_node1&property=testprop&property.value=value1

http://localhost:8983/solr/admin/collections?action=ADDREPLICAPROP&shard=shard1&collection=collection1&replica=core_node3&property=property.testprop&property.value=value2

输入

这对命令将导致“core_node_3”具有“testprop”属性(property.testprop)值设置,因为第二个命令指定 shardUnique=true,这将导致从“core_node_1”中删除该属性。

http://localhost:8983/solr/admin/collections?action=ADDREPLICAPROP&shard=shard1&collection=collection1&replica=core_node1&property=testprop&property.value=value1

http://localhost:8983/solr/admin/collections?action=ADDREPLICAPROP&shard=shard1&collection=collection1&replica=core_node3&property=testprop&property.value=value2&shardUnique=true

DELETEREPLICAPROP:删除副本属性

从特定副本中删除任意属性。

V1 API

输入

http://localhost:8983/solr/admin/collections?action=DELETEREPLICAPROP&collection=techproducts&shard=shard1&replica=core_node2&property=preferredLeader

V2 API 输入

curl -X DELETE http://localhost:8983/api/collections/techproducts/shards/shard1/replicas/core_node2/properties/preferredLeader

DELETEREPLICAPROP 参数

collection

必需

默认值:无

副本所属集合的名称。

shard

必需

默认值:无

副本所属分片的名称。

replica

必需

默认值:无

副本,例如 core_node1

property

必需

默认值:无

要删除的属性。

DELETEREPLICAPROP 响应

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