套件管理

Solr 中的套件管理員允許在 Solr 的叢集環境中安裝和更新 Solr 特定套件。

在這個系統中,套件 是一組 Java jar 檔案(通常一個),其中包含一個或多個 Solr 外掛程式。每個 jar 檔案還附帶一個簽名字串(可以根據提供的公開金鑰進行驗證)。

這個系統的一個關鍵設計層面是在叢集環境中安全地安裝或更新套件,而無需重新啟動每個節點。

設計的其他要素包括從遠端存放庫安裝的能力;套件標準化;命令列介面 (CLI);和套件存放區。

本節將重點介紹如何使用套件管理員來安裝和更新套件。有關技術詳細資訊,請參閱套件管理員內部一節。

與套件管理員互動

套件管理員 (CLI) 可讓您

  • 新增信任的存放庫

  • 列出存放庫中的套件

  • 安裝所需的套件

  • 將套件部署和取消部署至/從集合或叢集

  • 在有可用更新時更新套件

啟用套件管理員

套件管理員預設為停用。若要啟用它,請使用 -Denable.packages=true 參數啟動所有 Solr 節點。

$ bin/solr start -c -Denable.packages=true
啟用套件管理員會產生安全方面的後果。如果未經授權的使用者取得系統的存取權,他們將擁有 ZooKeeper 的寫入權限,並可以從不受信任的來源安裝套件。在啟用套件管理員之前,請務必使用防火牆和設定驗證與授權來保護 Solr 的安全。

新增信任的存放庫

存放庫是一個託管一個或多個套件的位置。通常,這是一個 Web 服務,它提供有關套件的中繼資訊、用於下載的套件構件,以及用於在安裝時驗證 jar 檔案簽名的公開金鑰。

為了將套件安裝到 Solr 中,必須新增一個託管這些套件的存放庫。

$ bin/solr package add-repo <repository-name> <repository-url>
請勿新增您不信任或無法控制的存放庫。僅新增基於 HTTPS 的存放庫,並避免基於 HTTP 的存放庫,以防範 MITM 攻擊。

列出和安裝套件

若要列出已安裝的套件

$ bin/solr package list-installed

若要列出可從新增的存放庫安裝的套件

$ bin/solr package list-available

要安裝套件,需將儲存庫中的構件複製到 Solr 的內部套件儲存區,並設定此套件的類別載入器以供使用。

$ bin/solr package install <package-name>[:<version>]

部署套件

一旦套件安裝完成,其中包含的插件即可在集合或叢集層級中使用。

有兩種方法可以實現:使用 CLI 的 deploy 命令或手動部署。

deploy 命令

如果套件作者聲明支援,則可以使用 CLI 的 deploy 命令部署套件。

$ bin/solr package deploy <package-name>:[version] --collections <collection1>[,<collection2>,...] [-p <param1>=<val1> -p <param2>=<val2> ...

或者

$ bin/solr package deploy <package-name>:[version] --cluster

如果套件接受設定命令的參數,則可以指定這些參數(依照套件文件所述)。

$ bin/solr package deploy <snipped...> -p <param1>=<val1> -p <param2>=<val2>

作者可能希望您透過提示來確認套件的部署。如果您將 -y 傳遞給命令,則可以跳過確認。

手動部署

也可以透過編輯組態集並重新載入集合來手動部署套件的集合層級插件。

例如,如果名為 mypackage 的套件包含一個請求處理器,我們將其添加到組態集的 solrconfig.xml 中,如下所示:

<requestHandler name="/myhandler" class="mypackage:full.path.to.MyClass"></requestHandler>

然後使用 Collections API 的 RELOAD 命令管理 UI 來重新載入集合。

接下來,設定此集合正在使用的套件版本。如果集合名為 collection1,套件名稱為 mypackage,且已安裝的版本為 1.0.0,則命令將如下所示:

curl  "https://127.0.0.1:8983/api/collections/collection1/config/params" \
   -H 'Content-type:application/json' -d "{set: {PKG_VERSIONS: {mypackage: '1.0.0'}}}"

若要手動安裝叢集層級插件,請參閱叢集層級請求處理器

驗證部署

部署後,請驗證集合正在使用該套件。

$ bin/solr package list-deployed -c <collection>

更新套件

為了更新套件,第一步是執行列出並安裝套件中所示的 list-available 命令,以確保更新的版本在已新增的儲存庫中可用。

接著,從儲存庫安裝新版本的套件。

$ bin/solr package install <package-name>:<version>

安裝新版本後,您可以選擇性地更新每個集合或叢集層級插件。假設舊版本的套件 mypackage1.0.0,而新版本為 2.0.0,則命令如下:

$ bin/solr package deploy mypackage:2.0.0 --update --collections mycollection

或者

$ bin/solr package deploy mypackage:2.0.0 --update --cluster

您可以執行 list-deployed 命令來驗證此集合正在使用新添加的版本。

取消部署套件

如果套件支援取消部署其包含的插件(請查看套件作者的文件),則先前部署的套件可以按如下方式取消部署:

$ bin/solr package undeploy <package-name> --collections <collection1>[,<collection2>,...]

解除安裝套件

如果套件已取消部署或從未部署,則可以按如下方式解除安裝:

$ bin/solr package uninstall <package-name>:<package-version>

或者

$ bin/solr package deploy <package-name>:<package-version> --cluster

套件名稱和版本都是必需的。

安全性

add-repo 步驟應僅使用啟用 HTTPS 的儲存庫 URL 執行,以防止在 Solr 擷取儲存庫的公開金鑰時遭受 MITM 攻擊。此 add-repo 步驟會註冊受信任儲存庫的公開金鑰,因此只能使用可直接寫入套件儲存區受信任儲存區的套件管理員(CLI)執行(套件儲存區中無法使用套件儲存區 API 寫入的特殊位置)。此外,保護 ZooKeeper 免受未經授權的寫入存取至關重要。

此外,請記住,一旦新增儲存庫,就可以從該儲存庫安裝**任何**套件。如果您想在生產環境中使用某些套件,最佳實踐是設定您自己的儲存庫,並將其新增到 Solr 中,而不是新增超出您管理控制範圍的通用第三方儲存庫。您可能需要使用自己的私密金鑰重新簽署來自第三方儲存庫的套件,並將它們託管在您自己的儲存庫中。