叢集與節點管理命令

叢集是一組彼此協調運作的 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 回應

回應將包含請求的狀態和叢集的狀態。

使用 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 參數

名稱

選用

預設值:無

屬性的名稱。支援的屬性名稱為 locationmaxCoresPerNodeurlSchemedefaultShardPreferences。如果已啟用Jaeger 追蹤模組,則屬性 samplePercentage 也可用。

可以設定其他屬性(例如,如果您需要用於自訂外掛程式),但它們必須以字首 ext. 開頭。不以 ext. 開頭的未知屬性將被拒絕。

選用

預設值:無

屬性的值。如果值為空或 null,則取消設定屬性。

CLUSTERPROP 回應

回應將包含請求的狀態和已更新或刪除的屬性。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

使用 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,該動作將以非同步方式處理

BalanceReplicas 回應

回應將包含請求的狀態。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

此操作不會保留屬於來源節點上的複本的必要鎖定。因此,請勿在此期間執行其他集合操作。

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 回應

回應將包含請求的狀態。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

使用 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,該動作將以非同步方式處理

MigrateReplicas 回應

回應將包含請求的狀態。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

此操作不會保留屬於來源節點上的複本的必要鎖定。因此,請勿在此期間執行其他集合操作。

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"
    }
  }
'

ADDROLE 參數

角色

必要

預設值:無

角色的名稱。目前唯一支援的角色是 overseer

節點

必要

預設值:無

將指派角色的節點名稱。即使在該節點啟動之前,也可以指派角色。

ADDROLE 回應

回應將包含請求的狀態和已更新或刪除的屬性。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

使用 ADDROLE 的範例

輸入

https://127.0.0.1:8983/solr/admin/collections?action=ADDROLE&role=overseer&node=192.167.1.2:8983_solr&wt=xml

輸出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
</response>

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"
    }
  }
'

REMOVEROLE 參數

角色

必要

預設值:無

角色的名稱。目前唯一支援的角色是 overseer

節點

必要

預設值:無

應移除角色的節點名稱。

REMOVEROLE 回應

回應將包含請求的狀態和已更新或刪除的屬性。如果狀態不是 "0",則錯誤訊息將說明請求失敗的原因。

使用 REMOVEROLE 的範例

輸入

https://127.0.0.1:8983/solr/admin/collections?action=REMOVEROLE&role=overseer&node=192.167.1.2:8983_solr&wt=xml

輸出

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int>
  </lst>
</response>

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":[
    "..."
  ],
  "..."
 }