副本管理命令

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

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

bin/solr start -c -e techproducts

ADDREPLICA:添加副本

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

  • V1 API

  • V2 API

输入

https://127.0.0.1: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"}}}

输入

curl -X POST https://127.0.0.1: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

可选

默认值:无

将创建的核心的 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 副本。

https://127.0.0.1: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

  • V2 API

输入

https://127.0.0.1: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"
}

输入

curl -X POST https://127.0.0.1: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

  • V2 API

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

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

按名称删除副本

curl -X DELETE https://127.0.0.1:8983/api/collections/techproducts/shards/shard1/replicas/core_node2

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

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

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

curl -X PUT -H "Content-type: application/json" "https://127.0.0.1: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

  • V2 API

输入

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

输入

curl -X PUT https://127.0.0.1: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'。

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

https://127.0.0.1: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” 中删除该属性。

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

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

DELETEREPLICAPROP:删除副本属性

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

  • V1 API

  • V2 API

输入

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

输入

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

DELETEREPLICAPROP 参数

collection

必需

默认值:无

副本所属的集合的名称。

shard

必需

默认值:无

副本所属的分片的名称。

replica

必需

默认值:无

副本,例如,core_node1

property

必需

默认值:无

要删除的属性。

DELETEREPLICAPROP 响应

响应将包括请求的状态。如果状态不是 "0",则错误消息将说明请求失败的原因。