AWS EC2 上的 SolrCloud

本指南是关于如何在 Amazon Web Services (AWS) EC2 实例上设置多节点 SolrCloud 集群的教程,适用于早期开发和设计。

本教程不适用于生产系统。原因之一是,它使用 Solr 的嵌入式 ZooKeeper 实例,而对于生产,你应该至少在集群中拥有 3 个 ZooKeeper 节点。对于生产安装,你应该采取其他步骤;请参阅 将 Solr 投入生产,了解如何在生产中部署 Solr。

在本指南中,我们将

  1. 启动多个 AWS EC2 实例

    • 创建新的安全组

    • 配置实例并启动

  2. 在新启动的 EC2 实例上安装、配置和启动 Solr

    • 安装系统先决条件:Java 1.8 及更高版本

    • 下载最新版本的 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 卷类型 作为 AMI。既有商业 AMI,也有基于社区的 AMI,例如 Amazon Linux AMI (HVM),SSD 卷类型,但这是一个适合我们目的的不错的 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 1.8 并下载 Solr

    # verify default java version packaged with AWS instances is 1.7
    $ java -version
    $ sudo yum install java-1.8.0
    $ sudo /usr/sbin/alternatives --config java
    # select jdk-1.8
    # verify default java version to java-1.8
    $ java -version
    # download desired version of Solr
    $ wget http://archive.apache.org/dist/solr/solr/{solr-full-version}/solr-{solr-full-version}.tgz
    # untar
    $ tar -zxvf solr-{solr-full-version}.tgz
    # set SOLR_HOME
    $ export SOLR_HOME=$PWD/solr-{solr-full-version}
    # put the env variable in .bashrc
    # vim ~/.bashrc
    export SOLR_HOME=/home/ec2-user/solr-{solr-full-version}
  3. 将公共 DNS 解析为更简单的主机名。

    我们假设 AWS 实例的公共 DNS 与 IPv4 公共 IP 如下

    • ec2-54-1-2-3.us-east-2.compute.amazonaws.com: 54.1.2.3

    • ec2-54-4-5-6.us-east-2.compute.amazonaws.com: 54.4.5.6

      编辑/etc/hosts,并为上述计算机添加条目

      $ sudo vim /etc/hosts
      54.1.2.3 solr-node-1
      54.4.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。

    ec2-101-1-2-3.us-east-2.compute.amazonaws.comsolr-node-1)内部

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

    在另一个节点上,ec2-101-4-5-6.us-east-2.compute.amazonaws.comsolr-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 (solr-node-1:8983/solr)
    
    http://ec2-101-4-5-6.us-east-2.compute.amazonaws.com:8983/solr (solr-node-2:8983/solr)

    您应该能够看到两个节点的 Solr UI 仪表板。

创建集合、索引和查询

您可以参考Solr 教程,详细了解如何创建具有多个分片和副本的集合,通过不同方法索引数据,并相应地查询文档。

使用外部 ZooKeeper 部署

如果您想配置一个外部 ZooKeeper 集群,以避免使用与 Solr 节点在同一 JVM 中运行的嵌入式单实例 ZooKeeper,则需要对上面列出的步骤进行一些调整,如下所示。

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

  • 在配置要启动的实例数时,选择打开 3 个实例,而不是 2 个。

  • 在修改每台机器上的 /etc/hosts 时,为第 3 个实例添加第三行,并为其指定一个可识别的名称

    $ sudo vim /etc/hosts
    54.1.2.3  solr-node-1
    54.4.5.6  solr-node-2
    54.7.8.9  zookeeper-node
  • 您需要手动安装 ZooKeeper,如下一节所述。

安装 ZooKeeper

这些步骤将帮助您在 AWS 上安装和配置 ZooKeeper 的单个实例。然而,这对于生产用途来说是不够的,其中建议使用至少三个节点的 ZooKeeper 集群。有关如何将此单实例更改为集群的信息,请参阅部分 ZooKeeper 集群配置

  1. 下载 ZooKeeper 的稳定版本。在此示例中,我们使用 ZooKeeper v3.9.1。在您用于托管 ZooKeeper 的节点(zookeeper-node)上,下载该软件包并将其解压缩

    # download stable version of ZooKeeper, here {dep-version-zookeeper}
    $ wget https://archive.apache.org/dist/zookeeper/zookeeper-{dep-version-zookeeper}/apache-zookeeper-{dep-version-zookeeper}.tar.gz
    # untar
    $ tar -zxvf apache-zookeeper-{dep-version-zookeeper}.tar.gz

    为将运行该进程的用户在 .bashrc 中添加一个 ZooKeeper 主目录环境变量(ZOO_HOME)。其余说明假设您已设置此变量。如果放置位置与以下内容不匹配,请相应地更正 ZooKeeper 安装路径。

    $ export ZOO_HOME=$PWD/apache-zookeeper-3.9.1
    # put the env variable in .bashrc
    # vim ~/.bashrc
    export ZOO_HOME=/home/ec2-user/apache-zookeeper-3.9.1
  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 文件以取消注释 autopurge 参数并定义数据目录的位置。

    # 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
  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-1 -z zookeeper-node:2181

如前所述,单个 ZooKeeper 节点不足以用于生产安装。有关在生产中部署 Solr 的更多信息,请参阅这些其他资源,一旦 EC2 实例启动并运行,就可以使用这些资源