AWS EC2 上的 SolrCloud

本指南是一個關於如何在 Amazon Web Services (AWS) EC2 執行個體上設定多節點 SolrCloud 叢集,以進行早期開發和設計的教學課程。

本教學課程不適用於生產系統。首先,它使用 Solr 的內嵌 ZooKeeper 執行個體,而對於生產環境,您應該在一個集群中至少有 3 個 ZooKeeper 節點。您應該採取額外的步驟來進行生產安裝;請參閱將 Solr 投入生產,瞭解如何在生產環境中部署 Solr。

在本指南中,我們將

  1. 啟動多個 AWS EC2 執行個體

    • 建立新的安全性群組

    • 設定執行個體並啟動

  2. 在新啟動的 EC2 執行個體上安裝、設定和啟動 Solr

    • 安裝系統必要條件:Java 11 或更新版本

    • 下載最新版本的 Solr

    • 在 SolrCloud 模式下啟動 Solr 節點

  3. 建立集合、索引文件和查詢系統

    • 建立具有多個分片和副本的集合

    • 將文件索引到新建立的集合

    • 透過查詢集合來驗證文件的存在

開始之前

若要使用本指南,您必須具備以下條件

  • 一個 AWS 帳戶。

  • 熟悉在本機電腦上設定單節點 SolrCloud。如果您之前從未使用過 Solr,請參閱Solr 教學課程

啟動 EC2 執行個體

建立新的安全性群組

  1. 導覽至 AWS EC2 主控台,並導覽至您選擇的區域。

  2. 設定一個 AWS 安全性群組,該群組將限制對安裝的存取,並允許我們啟動的 EC2 執行個體彼此之間無限制地交談。

    1. 從 EC2 儀表板中,按一下左側選單中「網路與安全性」下的 安全性群組

    2. 在「安全性群組」區段下,按一下 建立安全性群組。為您的安全性群組提供描述性名稱。

    3. 您可以選取現有的 VPC 之一,或建立一個新的 VPC。

    4. 我們這裡需要為我們的雲端開啟兩個連接埠

      1. Solr 連接埠。在本範例中,我們將使用 Solr 的預設連接埠 8983。

      2. ZooKeeper 連接埠:我們將使用 Solr 的內嵌 ZooKeeper,因此我們將使用預設連接埠 9983(請參閱使用外部 ZooKeeper 部署來設定外部 ZooKeeper)。

    5. 按一下 輸入 以設定輸入網路規則,然後選取 新增規則。選取「自訂 TCP」作為類型。輸入 8983 作為「連接埠範圍」,並選擇「我的 IP」作為來源,然後輸入您的公開 IP。建立第二個具有相同類型和來源的規則,但輸入 9983 作為連接埠。

      這會限制對您目前電腦的存取。如果您想要更廣泛地存取執行個體以與其他人協作,則可以指定,但請確保您只允許所需的存取權限。Solr 執行個體絕不應暴露於一般網際網路流量。

    6. 新增另一個 SSH 存取規則。選擇「SSH」作為類型,再次選擇「我的 IP」作為來源,並再次輸入您的公開 IP。您需要在所有執行個體上進行 SSH 存取,才能安裝和設定 Solr。

    7. 檢閱詳細資料,您的群組設定應該如下所示

      image
    8. 完成後按一下 建立

    9. 我們需要修改規則,以便屬於群組一部分的執行個體可以與屬於相同群組的其他所有執行個體通訊。我們在建立群組時無法執行此操作,因此我們需要在建立群組後編輯群組以新增此規則。

      1. 在安全性群組概觀表中選取新建立的群組。在「輸入」索引標籤下,按一下 編輯

      2. 按一下 新增規則。從下拉式清單中選擇 所有 TCP 作為類型,並輸入 0-65535 作為連接埠範圍。將目前安全性群組的名稱指定為 solr-sample

    10. 檢閱詳細資料,您的群組設定現在應該如下所示

      image
    11. 完成後,點擊儲存

設定執行個體並啟動

安全群組設定完成後,您可以從左側導覽選單選擇執行個體

在執行個體頁面下,點擊啟動執行個體按鈕,並按照精靈步驟操作。

  1. 選擇您的 Amazon Machine Image (AMI):選擇 Amazon Linux AMI, SSD Volume Type 作為 AMI。 這裡有商業 AMI 和社群 AMI 可供選擇,例如 Amazon Linux AMI (HVM), SSD Volume Type,但為了我們的目的,使用這個 AMI 是個不錯的選擇。點擊您選擇的映像旁邊的選取

  2. 下一個畫面會要求您選擇執行個體類型,t2.medium 已足夠。從列表中選擇它,然後點擊設定執行個體詳細資訊

  3. 設定執行個體。在「執行個體數量」欄位輸入 2。請確保「自動分配公有 IP」的設定為「已啟用」。

  4. 完成後,點擊新增儲存。對於此快速入門,大小為 8 GB,且磁碟區類型為 通用型 SSD 的預設值已足夠。如果您知道在終止執行個體後不需要儲存在 Solr 索引中的資料,您可以選擇「終止時刪除」。

  5. 完成後,點擊新增標籤。對於此快速入門,您不需要新增任何標籤,但如果您想新增,可以這麼做。

  6. 點擊設定安全群組。選擇 選取現有的安全群組,並選取您先前建立的安全群組:solr-sample。您應該會在頁面底部看到預期的輸入規則。

  7. 點擊檢閱

  8. 如果一切看起來都正確,點擊啟動

  9. 選取現有的「私密金鑰檔案」,或建立新的金鑰檔案並下載到您的本機,以便您能夠透過 SSH 登入執行個體。

    image
  10. 在執行個體清單中,您可以觀察狀態變化。在它們變成「執行中」之前,您無法使用這些執行個體。

安裝、設定和啟動

  1. 從執行個體清單中選取執行個體,找到該執行個體的公有 DNS 記錄,然後逐一登入每台機器。

    使用 SSH,如果您的 AWS 身分金鑰檔案是 aws-key.pem 且 AMI 使用 ec2-user 作為登入使用者,則在每個 AWS 執行個體上執行以下操作

    $ ssh-add aws-key.pem
    $ ssh -A ec2-user@<instance-public-dns>
  2. 在登入每個 AWS EC2 執行個體的同時,設定 Java 11 並下載 Solr

    # check if the AWS instance already has java installed
    $ java -version
    
    # install JDK 11
    $ sudo yum install java-11
    
    # configure JDK 11 as the default
    $ sudo /usr/sbin/alternatives --config java
    
    # verify that the default java version is now 11
    $ java -version
    # download desired version of Solr
    $ wget https://archive.apache.org/dist/solr/solr/9.7.0/solr-9.7.0.tgz
    
    # untar the archive
    $ tar -zxvf solr-9.7.0.tgz
    
    # configure SOLR_HOME env variable
    $ export SOLR_HOME=$PWD/solr-9.7.0
    
    # also add the env variable to .bashrc
    $ vim ~/.bashrc
    export SOLR_HOME=/home/ec2-user/solr-9.7.0
  3. 將公有 DNS 解析為更簡單的主機名稱。

    假設 EC2 執行個體的公有 DNS 主機名稱和 IPv4 位址如下

    • ec2-101-1-2-3.us-east-2.compute.amazonaws.com: 101.1.2.3 (公有), 172.16.2.3 (私有)

    • ec2-101-4-5-6.us-east-2.compute.amazonaws.com: 101.4.5.6 (公有), 172.16.5.6 (私有)

      編輯每個執行個體上的 /etc/hosts,並新增以下條目

      $ sudo vim /etc/hosts
      172.16.2.3 solr-node-1
      172.16.5.6 solr-node-2
  4. 在執行的 EC2 執行個體中設定 Solr。

    在此情況下,其中一台機器將託管嵌入式的 ZooKeeper 以及 Solr 節點,例如,ec2-101-1-2-3.us-east-2.compute.amazonaws.com (又名 solr-node-1)。

    請參閱使用外部 ZooKeeper 部署以了解如何設定外部 ZooKeeper。

    在兩台機器上,編輯 solr.in.sh 腳本,並設定允許 Solr 和嵌入式 ZooKeeper 監聽所有網路介面,而不僅僅是 127.0.0.1 的環境變數。

    $ cd $SOLR_HOME
    
    # uncomment and edit the two variables
    # vim bin/solr.in.sh
    SOLR_JETTY_HOST="0.0.0.0"
    SOLR_ZK_EMBEDDED_HOST="0.0.0.0"

    請參閱 網路設定以了解更多詳細資訊。

    ec2-101-1-2-3.us-east-2.compute.amazonaws.com (solr-node-1) 內

    $ cd $SOLR_HOME
    
    # start Solr node on 8983 and ZooKeeper will start on 9983 (8983+1000)
    $ bin/solr start -c -p 8983 -h solr-node-1

    在另一個節點 ec2-101-4-5-6.us-east-2.compute.amazonaws.com (solr-node-2) 上

    $ cd $SOLR_HOME
    
    # start Solr node on 8983 and connect to ZooKeeper running on first node
    $ bin/solr start -c -p 8983 -h solr-node-2 -z solr-node-1:9983
  5. 檢查和驗證。

    從本機的瀏覽器檢查 Solr 節點狀態。前往

    http://ec2-101-1-2-3.us-east-2.compute.amazonaws.com:8983/solr
    
    http://ec2-101-4-5-6.us-east-2.compute.amazonaws.com:8983/solr

    您應該能夠看到兩個節點的 Solr UI 儀表板。

建立集合、索引和查詢

您可以參考 Solr 教學課程,以了解如何全面逐步建立具有多個分片和複本的集合、透過不同方法索引資料,以及相應地查詢文件。

使用外部 ZooKeeper 部署

如果您想設定外部 ZooKeeper 集群以避免使用與 Solr 節點在同一個 JVM 中執行的嵌入式單執行個體 ZooKeeper,您需要在上述步驟中進行一些調整,如下所示。

  • 在建立安全群組時,您將開啟 2181 連接埠 (或您用於 ZooKeeper 的任何連接埠:其預設值為 2181),而不是為 ZooKeeper 開啟連接埠 9983

  • 在設定要啟動的執行個體數量時,選擇開啟 3 個執行個體,而不是 2 個。

  • 在修改每台機器上的 /etc/hosts 時,為第三個執行個體新增第三行,並為其指定一個可識別的名稱

    $ sudo vim /etc/hosts
    172.16.2.3  solr-node-1
    172.16.5.6  solr-node-2
    172.16.8.9  zookeeper-node
  • 您需要手動安裝 ZooKeeper,如下一節所述。

安裝 ZooKeeper

這些步驟將協助您在 AWS 上安裝和設定單個 ZooKeeper 執行個體。然而,這不足以用於生產用途,建議使用至少三個節點的 ZooKeeper 集群。請參閱 ZooKeeper 集群設定章節,以了解如何將此單個執行個體變更為集群。

  1. 下載穩定版本的 ZooKeeper。在此範例中,我們使用 ZooKeeper v3.9.2。在您用來託管 ZooKeeper (zookeeper-node) 的節點上,下載套件並解壓縮

    # download stable version of ZooKeeper
    $ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
    
    # untar the archive
    $ tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz

    將 ZooKeeper 的主目錄 (ZOO_HOME) 的環境變數新增到將執行該程序的用戶的 .bashrc。其餘的說明假設您已設定此變數。如果您的 ZooKeeper 安裝路徑與下面不符,請更正路徑。

    $ export ZOO_HOME=$PWD/apache-zookeeper-3.9.2-bin
    
    # put the env variable in .bashrc
    # vim ~/.bashrc
    export ZOO_HOME=/home/ec2-user/apache-zookeeper-3.9.2-bin
  2. 將目錄變更為 ZOO_HOME,並使用 ZooKeeper 提供的範本建立 ZooKeeper 設定。

    $ cd $ZOO_HOME
    
    # create ZooKeeper config by using zoo_sample.cfg
    $ cp conf/zoo_sample.cfg conf/zoo.cfg
  3. 在檔案系統中建立 ZooKeeper 資料目錄,並編輯 zoo.cfg 檔案以取消註解自動清除參數,並定義資料目錄的位置。

    # create data dir for ZooKeeper, edit zoo.cfg, uncomment autopurge parameters
    $ mkdir data
    $ vim conf/zoo.cfg
    
    # -- uncomment --
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=1
    
    # -- edit --
    dataDir=data
    
    # -- add --
    4lw.commands.whitelist=mntr,conf,ruok
  4. 啟動 ZooKeeper。

    $ cd $ZOO_HOME
    
    # start ZooKeeper, default port: 2181
    $ bin/zkServer.sh start
  5. 在用於 Solr 的第一個節點 (solr-node-1) 上,啟動 Solr 並告知其尋找 ZooKeeper 的位置。

    $ cd $SOLR_HOME
    
    # start Solr node on 8983 and connect to ZooKeeper running on ZooKeeper node
    $ bin/solr start -c -p 8983 -h solr-node-1 -z zookeeper-node:2181
  6. 在第二個 Solr 節點 (solr-node-2) 上,再次啟動 Solr 並告知其尋找 ZooKeeper 的位置。

    $ cd $SOLR_HOME
    
    # start Solr node on 8983 and connect to ZooKeeper running on ZooKeeper node
    $ bin/solr start -c -p 8983 -h solr-node-2 -z zookeeper-node:2181

如先前所述,單個 ZooKeeper 節點不足以用於生產環境。請參閱以下其他資源,以了解有關在生產環境中部署 Solr 的更多資訊,這些資源可以在您啟動並執行 EC2 執行個體後使用