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 系统映像 (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。

    在这种情况下,其中一台机器将托管与 Solr 节点一起嵌入的 ZooKeeper,例如 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,则需要对上述步骤进行一些调整,如下所示。

  • 创建安全组时,不是打开 ZooKeeper 的端口 9983,而是打开 2181(或您用于 ZooKeeper 的任何端口:其默认值为 2181)。

  • 在配置要启动的实例数量时,选择打开 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 实例后即可使用