集群和节点管理命令
集群是一组协同操作的 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 的示例
输入
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
-
可选
默认值:无
属性的名称。支持的属性名称为
location
、maxCoresPerNode
、urlScheme
和defaultShardPreferences
。如果已启用 Jaeger 跟踪模块,则属性samplePercentage
也可用。可以设置其他属性(例如,如果您需要它们用于自定义插件),但它们必须以前缀
ext.
开头。不以ext.
开头的未知属性将被拒绝。 val
-
可选
默认值:无
属性的值。如果该值为空或为 null,则该属性将取消设置。
使用 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,用于跟踪此操作,该操作将 异步处理。
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 的示例
输入
以下任一命令都会将“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,用于跟踪此操作,该操作将 异步处理。
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"
}
}
'
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"
}
}
'
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":[
"..."
],
"..."
}