節點角色

Solr 中的節點通常能夠執行各種類型的操作,例如託管副本、執行索引和查詢、集合管理任務等等。為了建立一個叢集,將這些功能隔離到某些專用節點,我們可以使用節點角色的概念。

定義

節點角色

角色是節點的指定,表示該節點可以執行某項功能。

模式

每個角色都有一個節點可以處於的模式清單。它可以是簡單的 (例如 ["on", "off"]) 或更精細的 (例如 ["allowed", "preferred", "disallowed"])。

角色

為了指定節點的角色,需要使用以下參數啟動 Solr 節點。

表 1. 啟動參數
參數 是否必要? 預設值

solr.node.roles

此節點的角色 (格式為:<role>:<mode>) 的逗號分隔清單。範例:-Dsolr.node.roles=data:on,overseer:allowed-Dsolr.node.roles=overseer:preferred

data:on,overseer:allowed

如果節點啟動時沒有 solr.node.roles 參數,則會假定其資料角色已開啟,並且已允許其上的監督者角色。如果您以前從未使用過角色,則可能不需要變更啟動參數中的任何內容,即可容納與這些角色相關聯的功能。

表 2. 支援的角色
角色 模式

data

on, off

overseer

allowed, preferred, disallowed

coordinator

on, off

data 角色

具有此角色 (模式為 "on") 的節點可以託管集合的分片和副本。

overseer 角色

具有此角色的節點可以執行監督者節點的職責 (除非模式為 disallowed)。當一個或多個節點的監督者角色處於 preferred 模式時,將從這些節點中選出監督者領導者。如果沒有節點被指定為首選監督者,或沒有此類節點處於作用中,則將從監督者角色處於 allowed 模式的節點中選出監督者領導者。如果所有被指定為監督者角色的節點 (允許或首選) 都已關閉,則叢集將沒有監督者。

coordinator 角色

當執行查詢時,具有此角色的節點可以如同擁有叢集中所有集合的複本一樣運作。其工作流程如下:

如果叢集中的集合具有非常大量的分片,在您的`資料節點`中執行分散式請求將會導致:

  • 大量的堆積記憶體使用

  • 頻繁的 GC 暫停

在這種情況下,可以使用 coordinator 角色啟動一些專用節點,並將查詢發送到該節點,以避免資料節點中斷和不可預測的負載。協調器節點是無狀態的,不託管任何資料。因此,我們可以建立和銷毀協調器節點,而不會有任何資料遺失或停機時間。

coordinator 節點中的工作流程

  1. 使用配置集 configset-Acoll-A 請求會傳送到協調器節點。

  2. 它會檢查是否存在使用配置集 configset-A 的核心。如果存在,則該核心會作為 coll-A 的複本,並對 coll-A 的所有分片執行分散式請求,並傳回回應。

  3. 如果沒有這樣的核心,它會檢查是否存在合成集合 .sys.COORDINATOR-COLL-configset-A,並且該集合的複本是否在本機存在。如果不存在,則會即時建立集合和複本,然後跳到步驟 1

使用範例

有時,當叢集中的節點處於大量查詢或索引負載時,監管者領導節點可能無法有效執行集合管理職責。擁有專用節點作為監管者可能是合理的。可以透過以下方式達到這種效果:

  • 叢集中的大多數節點(資料節點)啟動時使用 -Dsolr.node.roles=data:on,overseer:allowed (或者不使用任何參數,因為 solr.node.roles 的預設值相同)。

  • 一個或多個節點(專用監管者節點)可以啟動時使用 -Dsolr.node.roles=overseer:preferred (或 -Dsolr.node.roles=overseer:preferred,data:off)。

  • 一個或多個專用協調器節點可以啟動時使用 -Dsolr.node.roles=coordinator:on,data:off

在此配置中,可以在硬體資源(如 CPU、記憶體或磁碟空間)較少的硬體上佈建這些專用節點(因為它們是無狀態節點),但叢集仍將以最佳方式運作。如果專用監管者節點由於某些原因而關閉,則將從其中一個資料節點選出監管者領導者(因為它們的監管者模式為「允許」),並且一旦其中一個專用監管者節點重新啟動,它將再次被選為監管者領導者。

專用 coordinator 節點可以配置足夠的記憶體,但儲存空間非常少。它們也可以根據需求啟動和停止,因為它們是無狀態的。

角色 API

GET /api/cluster/node-roles/supported

擷取此叢集支援的角色及其支援模式的列表。

輸入

curl https://127.0.0.1:8983/api/cluster/node-roles/supported

輸出

{
  "supported-roles":{
    "data":{
      "modes":["off",
        "on"]
    },
    "overseer":{
      "modes":["disallowed",
        "allowed",
        "preferred"]
    }
  }
}

GET /api/cluster/node-roles

擷取叢集中所有節點的目前節點角色指派。

輸入

curl https://127.0.0.1:8983/api/cluster/node-roles

輸出

{
  "node-roles":{
    "data":{
      "off":["solr2:8983_solr"],
      "on":["solr1:8983_solr"]
    },
    "overseer":{
      "allowed":["solr1:8983_solr"],
      "disallowed":[],
      "preferred":["solr2:8983_solr"]
    }
  }
}

GET /api/cluster/node-roles/role/{role}

擷取指定角色的目前節點角色指派。

輸入

https://127.0.0.1:8983/api/cluster/node-roles/role/data

輸出

{
  "node-roles":{
    "data":{
      "off":["solr2:8983_solr"],
      "on":["solr1:8983_solr"]
    }
  }
}

輸入

https://127.0.0.1:8983/api/cluster/node-roles/role/data/off

輸出

{
  "node-roles":{
    "data":{
      "off":["solr2:8983_solr"]
    }
  }
}

GET /api/cluster/node-roles/node/{node}

擷取指定節點的目前節點角色指派。

輸入

curl https://127.0.0.1:8983/api/cluster/node-roles/node/solr1:8983_solr

輸出

{
  "data":"on",
  "overseer":"allowed"
}