開始使用 SolrCloud

SolrCloud 的設計目的是為在多個伺服器之間分散索引內容和查詢請求提供高可用性、容錯的環境。

它是一個系統,其中資料被組織成多個部分或分片,這些分片可以託管在多部機器上,並使用副本為可擴展性和容錯提供冗餘,以及一個 ZooKeeper 伺服器來幫助管理整體結構,以便可以正確路由索引和搜尋請求。

本節詳細說明 SolrCloud 及其內部運作方式,但在您深入研究之前,最好先了解您想要完成的目標。

本頁提供一個簡單的教學課程,以在 SolrCloud 模式下啟動 Solr,因此您可以開始了解分片在索引期間以及在服務查詢時如何相互作用。為此,我們將使用在單一機器上設定 SolrCloud 的簡單範例,這顯然不是真正的生產環境,該環境將包含多個伺服器或虛擬機器。在真正的生產環境中,您也會使用真實的機器名稱,而不是我們在此處使用的「localhost」。

在本節中,您將學習如何使用啟動指令碼和特定的 configset 來啟動 SolrCloud 集群。

本教學課程假設您已經熟悉使用 Solr 的基本知識。如果您需要複習,請參閱 Solr 教學課程,以了解 Solr 的概念。如果您載入文件作為該練習的一部分,您應該重新開始使用全新的 Solr 安裝來進行這些 SolrCloud 教學課程。

基於安全性考量,Solr 節點預設只接受來自 localhost 的連線。設定具有多個節點的 SolrCloud 部署的管理員必須覆寫此設定。如需更多詳細資訊,請參閱 網路設定 一節。

SolrCloud 範例

互動式啟動

bin/solr 指令碼讓您輕鬆開始使用 SolrCloud,因為它會引導您完成在 SolrCloud 模式下啟動 Solr 節點和新增集合的程序。若要開始,只需執行

$ bin/solr start -e cloud

這會啟動一個互動式工作階段,引導您完成設定具有嵌入式 ZooKeeper 的簡單 SolrCloud 集群的步驟。

指令碼首先會詢問您要在本機集群中執行多少個 Solr 節點,預設值為 2 個。

Welcome to the SolrCloud example!

This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]

指令碼支援啟動最多 4 個節點,但我們建議在開始時使用預設值 2 個。這些節點將各自存在於單一機器上,但將使用不同的連接埠來模擬在不同伺服器上的操作。

接下來,指令碼會提示您將每個 Solr 節點繫結到的連接埠,例如

 Please enter the port for node1 [8983]

為每個節點選擇任何可用的連接埠;第一個節點的預設值為 8983,第二個節點的預設值為 7574。指令碼將依序啟動每個節點,並顯示其用於啟動伺服器的命令,例如

$ bin/solr start --cloud -s example/cloud/node1/solr -p 8983

第一個節點也會啟動繫結到連接埠 9983 的嵌入式 ZooKeeper 伺服器。第一個節點的 Solr home 位於 example/cloud/node1/solr 中,如 -s 選項所示。

啟動集群中的所有節點後,指令碼會提示您建立集合的名稱

 Please provide a name for your new collection: [gettingstarted]

建議的預設值為「gettingstarted」,但您可能想要為您的特定搜尋應用程式選擇更合適的名稱。

接下來,指令碼會提示您將集合分散到的分片數目。稍後會更詳細地說明 SolrCloud 分片與索引,因此如果您不確定,我們建議使用預設值 2,以便您可以查看集合如何在 SolrCloud 集群中的多個節點之間分散。

接下來,腳本會提示您為每個分片建立的副本數量。同樣地,這部分會在指南的後續章節中詳細介紹,如果您不確定,請使用預設值 2,以便了解 SolrCloud 如何處理副本。

最後,腳本會提示您輸入集合的設定目錄名稱。您可以選擇 _defaultsample_techproducts_configs。設定目錄會從 server/solr/configsets/ 中提取,您可以事先檢視它們。當您還在為文件設計 schema,並且需要一些彈性來嘗試 Solr 時,_default 設定會很有用,因為它具有 schemaless 功能。然而,在建立集合之後,可以停用 schemaless 功能,以鎖定 schema (這樣之後索引的文件就不會變更 schema),或自行設定 schema。可以依照下列方式完成 (假設您的集合名稱為 mycollection)

  • V1 API

  • V2 API SolrCloud

$ curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
$ curl http://host:8983/api/collections/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'

此時,您應該已在本地 SolrCloud 叢集中建立新的集合。若要驗證這一點,您可以執行 status 命令

$ bin/solr status

如果在這個過程中遇到任何錯誤,請檢查 example/cloud/node1/logsexample/cloud/node2/logs 中的 Solr 日誌檔。

您可以透過訪問 Solr Admin UI 中的雲端面板,查看集合如何在叢集中部署:https://127.0.0.1:8983/solr/#/~cloud。Solr 還提供一種方法,可以使用 healthcheck 命令對集合執行基本診斷

$ bin/solr healthcheck -c gettingstarted

healthcheck 命令會收集集合中每個副本的基本資訊,例如文件數量、目前狀態 (作用中、關閉等) 和位址 (副本在叢集中的位置)。

現在可以使用 Post Tool 將文件新增到 SolrCloud。

若要停止 SolrCloud 模式下的 Solr,您可以使用 bin/solr 腳本並發出 stop 命令,如下所示:

$ bin/solr stop --all

使用 --no-prompt 開始

您也可以使用以下命令,以所有預設值啟動 SolrCloud,而不是使用互動式工作階段

$ bin/solr start -e cloud --no-prompt

重新啟動節點

您可以使用 bin/solr 腳本重新啟動您的 SolrCloud 節點。例如,若要重新啟動在埠 8983 上執行的 node1 (具有內嵌的 ZooKeeper 伺服器),您可以執行:

$ bin/solr restart -c -p 8983 -s example/cloud/node1/solr

若要重新啟動在埠 7574 上執行的 node2,您可以執行:

$ bin/solr restart -c -p 7574 -z localhost:9983 -s example/cloud/node2/solr

請注意,在啟動 node2 時,您需要指定 ZooKeeper 位址 (-z localhost:9983),這樣它才能加入具有 node1 的叢集。

將節點新增到叢集

將節點新增到現有叢集比較進階,需要對 Solr 有更多了解。使用啟動腳本啟動 SolrCloud 叢集後,您可以透過以下方式將新節點新增到其中:

$ mkdir <solr.home for new Solr node>
$ bin/solr start --cloud -s <solr.home>/solr -p <port num> -z <zk hosts string>

請注意,上述操作需要您建立 Solr home 目錄。

以下範例 (包含目錄結構) 會將節點新增到使用 "bin/solr start -e cloud" 啟動的範例

$ mkdir -p example/cloud/node3/solr
$ bin/solr start --cloud -s example/cloud/node3/solr -p 8987 -z localhost:9983

先前的命令會在埠 8987 上啟動另一個 Solr 節點,並將 Solr home 設定為 example/cloud/node3/solr。新的節點會將其日誌檔寫入 example/cloud/node3/logs

在您熟悉 SolrCloud 範例的運作方式後,我們建議您使用將 Solr 投入生產環境中描述的流程,在生產環境中設定 SolrCloud 節點。