叢集與節點管理命令
叢集是一組彼此協調運作的 Solr 節點。
這些 API 命令在整個叢集層級或個別節點上與 SolrCloud 叢集搭配運作。
CLUSTERSTATUS:叢集狀態
擷取叢集狀態,包括集合、分片、複本、設定名稱,以及集合別名和叢集屬性。
此外,此命令會報告每個集合和分片的 health
狀態,以便更容易監控集合的運作狀態。以下定義了健康狀態值,從最佳到最差排序,依據作用中複本的百分比 (active
):
綠色
-
active == 100%
,所有複本都處於作用中,且有分片領導者。 黃色
-
100% > active > 50%
,且有分片領導者。 橘色
-
50% >= active > 0%
,且有分片領導者。 紅色
-
沒有作用中複本或沒有分片領導者。
集合健康狀態會報告為任何分片的最差狀態,例如,對於所有分片都是綠色,但有一個是黃色的集合,集合健康狀態會報告為黃色。
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERSTATUS
curl -X GET https://127.0.0.1:8983/api/cluster
CLUSTERSTATUS 參數
collection
-
選用
預設值:無
要求資訊的集合或別名名稱。如果省略,則會傳回叢集中所有集合的資訊。如果提供別名,則會傳回別名中集合的資訊。
shard
-
選用
預設值:無
要求資訊的分片。可以將多個分片名稱指定為逗號分隔的清單。
_route_
-
選用
預設值:無
如果您需要知道特定文件屬於哪個分片,但您不知道它落在哪個分片下,可以使用此功能。
使用 CLUSTERSTATUS 的範例
輸入
https://127.0.0.1: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
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=CLUSTERPROP&name=urlScheme&val=https
curl -X POST https://127.0.0.1:8983/api/cluster -H 'Content-Type: application/json' -d '
{
"set-property": {
"name": "urlScheme",
"val": "https"
}
}
'
CLUSTERPROP 參數
名稱
-
選用
預設值:無
屬性的名稱。支援的屬性名稱為
location
、maxCoresPerNode
、urlScheme
和defaultShardPreferences
。如果已啟用Jaeger 追蹤模組,則屬性samplePercentage
也可用。可以設定其他屬性(例如,如果您需要用於自訂外掛程式),但它們必須以字首
ext.
開頭。不以ext.
開頭的未知屬性將被拒絕。 值
-
選用
預設值:無
屬性的值。如果值為空或 null,則取消設定屬性。
使用 CLUSTERPROP 的範例
輸入
https://127.0.0.1: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
-
V2 API
此操作沒有 V1 對等項。
curl -X POST -H 'Content-type:application/json' --data-binary '
{
"set-obj-property": {
"defaults" : {
"collection": {
"numShards": 2,
"nrtReplicas": 1,
"tlogReplicas": 1,
"pullReplicas": 1
}
}
}
}' https://127.0.0.1:8983/api/cluster
取消設定 nrtReplicas
的唯一值
curl -X POST -H 'Content-type:application/json' --data-binary '
{
"set-obj-property": {
"defaults" : {
"collection": {
"nrtReplicas": null
}
}
}
}' https://127.0.0.1:8983/api/cluster
取消設定 defaults
中的所有值
curl -X POST -H 'Content-type:application/json' --data-binary '
{ "set-obj-property" : {
"defaults" : null
}' https://127.0.0.1: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"
}
}' https://127.0.0.1:8983/api/cluster
此時,如果您在具有例如 rack=rack1
的節點上執行查詢,Solr 將嘗試僅命中來自 rack1
的複本。
平衡複本
在給定的 Solr 節點集中隨機調整複本,直到達到平衡狀態。
將使用已設定的複本放置外掛程式來決定
-
哪些複本應移動以進行平衡
-
這些複本應放置在哪些節點上
-
叢集何時達到「平衡」狀態
-
V2 API
curl -X POST https://127.0.0.1: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
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=techproducts&property=preferredLeader
curl -X POST https://127.0.0.1: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" 集合中每個分片的一個複本上。
https://127.0.0.1:8983/solr/admin/collections?action=BALANCESHARDUNIQUE&collection=collection1&property=preferredLeader&wt=xml
https://127.0.0.1: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>
在發出此呼叫後檢查叢集狀態應會顯示每個分片中只有一個具有此屬性的複本。
遷移複本
將所有複本從給定的來源節點集中遷移出去。
+ 如果使用多個節點作為 targetNode(明確或預設),則將使用已設定的 複本放置外掛程式 來判斷每個遷移的複本應使用哪個 targetNode。
-
V2 API
curl -X POST https://127.0.0.1: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 的功能已被 遷移複本 取代和增強,請考慮改用新的 API,因為此 API 可能會在未來版本中移除。 |
此命令會在另一個節點(目標)上重新建立一個節點(來源)中的複本。複製每個複本後,將刪除來源節點中的複本。
對於也是分片領導者的來源複本,該操作將等待使用 timeout
參數設定的秒數,以確保有一個活動複本可以成為領導者,無論是現有的複本成為領導者,還是新複本完成復原並成為領導者)。
如果未提供 targetNode,則將使用已設定的複本放置外掛程式來判斷每個重新建立的複本應放置在哪個節點上。
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=REPLACENODE&sourceNode=source-node&targetNode=target-node
curl -X POST "https://127.0.0.1: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
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=DELETENODE&node=nodeName
curl -X POST "https://127.0.0.1:8983/api/cluster/nodes/localhost:7574_solr/clear/" -H 'Content-Type: application/json' -d '
{
"async": "someAsyncId"
}
'
DELETENODE 參數
節點
-
必要
預設值:無
要移除的節點。
async
-
選用
預設值:無
用於追蹤此動作的請求 ID,該動作將以非同步方式處理。
ADDROLE:新增角色
將角色指派給叢集中的給定節點。唯一支援的角色是 overseer
。
使用此命令將特定節點指定為 Overseer。多次呼叫以新增更多節點。這在大型叢集中很有用,在大型叢集中,Overseer 很容易過載。如果有,指定為 'overseer' 角色的節點列表中的其中一個節點將成為 overseer。如果沒有指定的節點啟動並執行,系統將會將角色指派給任何其他節點。
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=ADDROLE&role=overseer&node=localhost:8983_solr
curl -X POST https://127.0.0.1:8983/api/cluster -H 'Content-Type: application/json' -d '
{
"add-role": {
"role": "overseer",
"node": "localhost:8983_solr"
}
}
'
REMOVEROLE:移除角色
移除已指派的角色。此 API 用於復原使用 ADDROLE 操作指派的角色
-
V1 API
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=REMOVEROLE&role=overseer&node=localhost:8983_solr
curl -X POST https://127.0.0.1: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
-
V2 API
https://127.0.0.1:8983/solr/admin/collections?action=OVERSEERSTATUS
curl -X GET https://127.0.0.1:8983/api/cluster/overseer
使用 OVERSEERSTATUS 的範例
輸入
https://127.0.0.1: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":[
"..."
],
"..."
}