複本管理命令

複本是分片的實體副本。複本透過提供額外的資料副本來增強容錯移轉,並透過提供額外的搜尋容量來增強可擴展性。

本節中的所有範例都假設您正在執行「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,但如果副本沒有屬性 shared_storage 且值為 true,則會忽略此設定。

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 可防止刪除 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 回應

回應將包含請求的狀態。如果狀態不是「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」,則錯誤訊息將說明請求失敗的原因。