AWS EC2 上的 SolrCloud
本指南是一个教程,介绍如何在 Amazon Web Services (AWS) EC2 实例上设置多节点 SolrCloud 集群,以进行早期开发和设计。
本教程不适用于生产系统。首先,它使用 Solr 的嵌入式 ZooKeeper 实例,而对于生产环境,您应该在集群中至少有 3 个 ZooKeeper 节点。对于生产安装,您还应该采取其他步骤;有关如何在生产环境中部署 Solr,请参阅将 Solr 用于生产环境。
在本指南中,我们将
-
启动多个 AWS EC2 实例
-
创建新的安全组
-
配置实例并启动
-
-
在新启动的 EC2 实例上安装、配置和启动 Solr
-
安装系统先决条件:Java 11 或更高版本
-
下载最新版本的 Solr
-
在 SolrCloud 模式下启动 Solr 节点
-
-
创建集合、索引文档并查询系统
-
创建具有多个分片和副本的集合
-
将文档索引到新创建的集合中
-
通过查询集合来验证文档是否存在
-
启动 EC2 实例
创建新的安全组
-
导航到 AWS EC2 控制台并选择您所需的区域。
-
配置一个 AWS 安全组,这将限制对安装的访问,并允许我们启动的 EC2 实例彼此通信而没有任何限制。
-
从 EC2 仪表板中,单击左侧菜单中“网络和安全”下的安全组。
-
在安全组部分下,单击创建安全组。为您的安全组指定一个描述性名称。
-
您可以选择一个现有的 VPC,或创建一个新的 VPC。
-
我们需要为我们的云开放两个端口。
-
Solr 端口。在本例中,我们将使用 Solr 的默认端口 8983。
-
ZooKeeper 端口:我们将使用 Solr 的嵌入式 ZooKeeper,因此我们将使用默认端口 9983(请参阅使用外部 ZooKeeper 部署来配置外部 ZooKeeper)。
-
-
单击 入站 以设置入站网络规则,然后选择 添加规则。选择“自定义 TCP”作为类型。在“端口范围”中输入
8983
,并选择“我的 IP”作为源,然后输入您的公网 IP。创建第二个规则,类型和源相同,但在端口中输入9983
。这将限制对您当前机器的访问。如果您希望更广泛地访问该实例以便与他人协作,您可以指定,但请确保您只允许所需的访问权限。Solr 实例绝不应暴露给一般的互联网流量。
-
为 SSH 访问添加另一个规则。选择“SSH”作为类型,并再次选择“我的 IP”作为源,然后再次输入您的公网 IP。您需要在所有实例上进行 SSH 访问以安装和配置 Solr。
-
检查详细信息,您的组配置应如下所示
-
完成后,单击 创建。
-
我们需要修改规则,以便组中的实例可以与同一组中的所有其他实例通信。我们在创建组时无法做到这一点,因此我们需要在创建后编辑组以添加此规则。
-
在“安全组”概述表中选择新创建的组。在“入站”选项卡下,单击 编辑。
-
单击 添加规则。从类型下拉列表中选择
所有 TCP
,并在端口范围中输入0-65535
。将当前安全组的名称指定为solr-sample
。
-
-
检查详细信息,您的组配置现在应如下所示
-
完成后,单击 保存。
-
配置实例并启动
安全组就绪后,您可以从左侧导航菜单中选择 实例。
在“实例”下,单击 启动实例 按钮,然后按照向导步骤操作
-
选择您的 Amazon 系统映像 (AMI):选择 Amazon Linux AMI, SSD Volume Type 作为 AMI。有商业 AMI 和基于社区的 AMI 可用,例如 Amazon Linux AMI (HVM), SSD Volume Type,但这是一个很好的 AMI 用于我们的目的。单击您选择的图像旁边的 选择。
-
下一个屏幕要求您选择实例类型,t2.medium 足矣。从列表中选择它,然后单击 配置实例详细信息。
-
配置实例。在“实例数量”字段中输入 2。确保“自动分配公有 IP”的设置为“已启用”。
-
完成后,单击 添加存储。对于运行此快速入门,大小为 8 GB 和卷类型为 通用 SSD 的默认值足够了。如果您知道在终止实例后不需要存储在 Solr 索引中的数据,可以选择“终止时删除”。
-
完成后,单击 添加标签。对于此快速入门,您不必添加任何标签,但您可以根据需要添加它们。
-
单击 配置安全组。选择 选择现有安全组,然后选择您之前创建的安全组:
solr-sample
。您应该在页面底部看到预期的入站规则。 -
单击 检查。
-
如果一切看起来正确,请单击 启动。
-
选择现有的“私钥文件”或创建一个新文件并下载到您的本地机器,以便您可以通过 SSH 登录到实例。
-
在实例列表中,您可以观察状态的变化。在它们变为 “运行中” 之前,您无法使用这些实例。
安装、配置和启动
-
通过从实例列表中选择实例来查找该实例的公有 DNS 记录,并逐个登录到每台机器。
使用 SSH,如果您的 AWS 身份密钥文件是
aws-key.pem
并且 AMI 使用ec2-user
作为登录用户,则在每个 AWS 实例上执行以下操作$ ssh-add aws-key.pem $ ssh -A ec2-user@<instance-public-dns>
-
登录到每个 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
-
将公有 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
-
-
在运行的 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
-
检查和验证。
从本地机器上的浏览器检查 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 集群配置部分。
-
下载 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
-
将目录更改为
ZOO_HOME
,并通过使用 ZooKeeper 提供的模板创建 ZooKeeper 配置。$ cd $ZOO_HOME # create ZooKeeper config by using zoo_sample.cfg $ cp conf/zoo_sample.cfg conf/zoo.cfg
-
在文件系统中创建 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
-
启动 ZooKeeper。
$ cd $ZOO_HOME # start ZooKeeper, default port: 2181 $ bin/zkServer.sh start
-
在用于 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
-
在第二个 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 实例后即可使用 |