升級 Solr 集群

此頁面說明如何升級使用服務安裝腳本安裝的現有 Solr 集群。

此頁面上概述的步驟假設您使用預設的服務名稱 solr。如果您使用其他服務名稱或 Solr 安裝目錄,則必須相應地修改下面提到的一些路徑和命令。
本參考指南的先前版本提到了 Lucene 專案提供的 IndexUpgraderTool,如果需要,可以使用它來離線升級 Solr 索引檔。有業務需求需要使用它的使用者可以像以前一樣使用此工具,但在絕大多數升級工作流程中不需要它。下面的文件假設未使用該工具。

規劃您的升級

以下是在開始升級過程之前需要準備的事項清單

  1. 檢查Solr 升級注意事項,以確定新版本的 Solr 中的任何行為變更是否會影響您的安裝。

  2. 如果未使用複製 (即,replicationFactor 小於 1 的集合),則應備份每個集合。如果您的所有集合都使用複製,則實際上不需要進行備份,因為您將會單獨升級和驗證每個節點。

  3. 確定哪個 Solr 節點目前在 SolrCloud 中託管 Overseer 領導者程序,因為您應該最後升級此節點。要確定 Overseer,請使用 Overseer 狀態 API

  4. 如果可能,請計畫在系統維護期間執行升級。您將對集群執行滾動重新啟動 (每個節點逐一重新啟動),但我們仍然建議在系統使用率最低時執行升級。

  5. 驗證集群目前是否狀況良好且所有副本都處於活動狀態,因為您不應在降級的集群上執行升級。

  6. 針對新的 Solr JAR 檔案重新建置和測試所有自訂伺服器端元件。

  7. 確定 Solr 控制腳本使用的下列變數的值

    • ZK_HOST:您的目前 SolrCloud 節點用來連線到 ZooKeeper 的 ZooKeeper 連線字串;此值對於集群中的所有節點都相同。

    • SOLR_HOST:每個 Solr 節點在加入 SolrCloud 集群時用於向 ZooKeeper 註冊的主機名稱;此值將用於設定啟動新的 Solr 程序時的 host Java 系統屬性。

    • SOLR_PORT:每個 Solr 節點監聽的埠號,例如 8983。

    • SOLR_HOME:每個 Solr 節點的 Solr 主目錄的絕對路徑。這個值將透過 solr.solr.home 系統屬性傳遞給新的 Solr 程序,請參閱:設定 solr.xml

      如果您是從 Solr 5.x 或更新版本的安裝升級,這些值通常可以在 /var/solr/solr.in.sh/etc/default/solr.in.sh 中找到。

您現在應該準備好升級您的叢集了。請在生產環境中執行升級之前,先在測試或預備叢集中驗證此流程。

升級流程

我們建議的方法是逐一升級每個 Solr 節點。換句話說,您需要停止一個節點,將其升級到新版本的 Solr,然後再重新啟動它,之後才能繼續下一個節點。這表示在短時間內,您的叢集中會同時運行「舊 Solr」和「新 Solr」節點。我們也假設您會將新的 Solr 節點指向您現有的 Solr 主目錄,其中管理著節點上每個集合的 Lucene 索引檔案。這表示您無需移動任何索引檔案即可執行升級。

步驟 1:停止 Solr

首先停止您想要升級的 Solr 節點。停止節點後,如果使用複製 (例如,replicationFactor 小於 1 的集合),請確認在已關閉節點上託管的所有領導者已成功遷移到其他複本;您可以透過造訪 Solr 管理介面中的雲端畫面來執行此操作。如果未使用複製,則任何在已關閉節點上託管分片的集合將會暫時離線。

步驟 2:將 Solr 安裝為服務

請按照 將 Solr 部署到生產環境文件中說明的方式,將 Solr 安裝為 Linux 上的服務。使用 -n 參數以避免安裝程式腳本自動啟動 Solr。您需要在下一步更新 /etc/default/solr.in.sh 包含檔案以完成升級程序。

如果您現有的 Solr 安裝有 /var/solr/solr.in.sh 檔案,執行 install_solr_service.sh 腳本會將此檔案移動到其新位置:/etc/default/solr.in.sh(詳情請參閱 SOLR-8101

步驟 3:設定環境變數覆寫

使用文字編輯器開啟 /etc/default/solr.in.sh 並確認已正確設定下列變數,或根據需要在包含檔案的底部新增這些變數。

ZK_HOST=
SOLR_HOST=
SOLR_PORT=
SOLR_HOME=

請確保您計劃擁有 Solr 程序的使用者是 SOLR_HOME 目錄的所有者。例如,如果您計劃以 "solr" 使用者身分執行 Solr,且 SOLR_HOME/var/solr/data,則您需要執行:sudo chown -R solr: /var/solr/data

步驟 4:啟動 Solr

您現在可以透過執行 sudo service solr start 來啟動升級後的 Solr 節點。升級後的實例會加入現有的叢集,因為您使用的是舊 Solr 節點所使用的相同 SOLR_HOMESOLR_PORTSOLR_HOST 設定;因此,新的伺服器對於正在運行的叢集而言看起來會與舊節點相同。請務必查看 /var/solr/logs/solr.log 中是否有啟動期間的錯誤。

步驟 5:執行健康檢查

您應該在繼續升級叢集中的下一個節點之前,針對升級後節點上託管的所有集合執行 Solr 的 healthcheck 命令。例如,如果新升級的節點託管了 MyDocuments 集合的複本,則您可以執行下列命令(將 ZK_HOST 替換為 ZooKeeper 連線字串):

/opt/solr/bin/solr healthcheck -c MyDocuments -z ZK_HOST

尋找有關集合任何複本回報的任何問題。

最後,針對叢集中的所有節點重複步驟 1-5。