副本管理命令
副本是分片的物理副本。副本通过提供数据的其他副本增强故障转移,并通过为搜索提供其他容量增强可扩展性。
本节中的所有示例都假设您正在运行“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"]
。
如果未指定node 或createNodeSet /nodeSet ,则会从群集中所有活动节点中选择最佳节点。 |
instanceDir
-
可选
默认值:无
将创建的核心实例目录。
dataDir
-
可选
默认值:无
应创建核心的目录。
type
-
可选
默认值:
nrt
要创建的副本类型。允许以下可能值
-
nrt
:NRT 类型维护事务日志并在本地更新其索引。 -
tlog
:TLOG 类型维护事务日志,但仅通过复制更新其索引。 -
pull
:PULL 类型不维护事务日志,并且仅通过复制更新其索引。此类型无资格成为领导者。有关副本类型选项的更多信息,请参阅 副本类型 部分。
-
nrtReplicas
-
可选
默认值:参见说明
应创建的
nrt
副本数。如果type
为nrt
,则默认为1
,否则为0
。 tlogReplicas
-
可选
默认值:参见说明
应创建的
tlog
副本数。如果type
为tlog
,则默认为1
,否则为0
。 pullReplicas
-
可选
默认值:参见说明
应创建的
pull
副本数。如果type
为pull
,则默认为1
,否则为0
。 property.name=value
-
可选
默认值:无
用作在创建的核心中作为附加属性的名称/值对。有关受支持的属性和值的详细信息,请参阅 核心发现。
每个 core.properties 文件中的条目对于 Solr 正确运行至关重要。覆盖条目可能会导致无法使用的集合。通过指定 |
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
。
如果在同一节点上存在来自同一分片的多个副本的集合上使用此命令,并且shard
和sourceNode
参数与多个副本匹配,则所选副本不是确定性的(当前是随机的)。
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
-
可选
默认值:无
要移动的副本的名称。除非指定了
shard
和sourceNode
,否则此参数是必需的,但是此参数优先于这两个参数。 timeout
-
可选
默认值:
600
秒在删除旧位置的副本之前,等待副本在新位置中处于活动状态的秒数。如果超时,则不会发生删除,也不会回滚创建,可能会留下一个额外的副本。目前,如果副本是 hdfs 副本,则此参数将被忽略。
inPlaceMove
-
可选
默认值:
true
对于使用共享文件系统的副本,允许“就地”移动,该移动会重复使用共享数据。默认为
true
,但如果副本不具有值为true
的属性shared_storage
,则此参数将被忽略。 async
-
可选
默认值:无
用于跟踪此操作的请求 ID,该操作将 异步处理。
DELETEREPLICA:删除副本
允许删除一个或多个副本。可以多种方式指定要删除的副本
-
如果同时提供了关联的集合、分片和副本名称,则可以删除单个特定副本。
-
如果提供了关联的集合和分片名称以及要删除的副本的
count
,则可以从特定分片中删除多个副本。 -
如果提供了关联的集合名称以及要删除的副本的
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
,都将被解释为preferredLeader
的false
。
使用 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