複本管理命令
複本是分片的實體副本。複本透過提供額外的資料副本來增強容錯移轉,並透過提供額外的搜尋容量來增強可擴展性。
本節中的所有範例都假設您正在執行「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"]
。
如果未指定 node 或 createNodeSet /nodeSet ,則會從叢集中所有作用中的節點中選擇最佳節點。 |
instanceDir
-
選用
預設:無
將要建立的核心的 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 副本。
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
。
如果此命令用於在同一個節點上存在來自同一個分片的多個副本的集合,並且 shard
和 sourceNode
參數符合多個副本,則選擇的副本是不確定的(目前是隨機的)。
-
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
-
選用
預設:無
要移動的副本名稱。除非指定
shard
和sourceNode
,否則此參數為必填,但是此參數優先於這兩個參數。 timeout
-
選用
預設值:
600
秒等待副本在新位置上線的秒數,然後再刪除舊位置的副本。如果逾時,將不會刪除,並且不會復原建立,可能會留下額外的副本。目前,如果副本是 hdfs 副本,則會忽略此參數。
inPlaceMove
-
選用
預設值:
true
對於使用共用檔案系統的副本,允許重複使用共用資料的「就地」移動。預設為
true
,但如果副本沒有屬性shared_storage
且值為true
,則會忽略此設定。 async
-
選用
預設:無
用於追蹤此動作的請求 ID,該動作將以非同步方式處理。
DELETEREPLICA:刪除副本
允許刪除一個或多個副本。可以透過多種方式指定要刪除的副本
-
如果提供了相關聯的集合、分片和副本名稱,則可以刪除單一特定的副本。
-
如果提供了相關聯的集合和分片名稱,以及要刪除的副本的
count
,則可以從特定分片中刪除多個副本。 -
如果提供了相關聯的集合名稱,以及要刪除的副本的
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
可防止刪除 instance 目錄。 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
,都會將preferredLeader
解釋為false
。
使用 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