AWS EC2 上的 SolrCloud
本指南是关于如何在 Amazon Web Services (AWS) EC2 实例上设置多节点 SolrCloud 集群的教程,适用于早期开发和设计。
本教程不适用于生产系统。原因之一是,它使用 Solr 的嵌入式 ZooKeeper 实例,而对于生产,你应该至少在集群中拥有 3 个 ZooKeeper 节点。对于生产安装,你应该采取其他步骤;请参阅 将 Solr 投入生产,了解如何在生产中部署 Solr。
在本指南中,我们将
-
启动多个 AWS EC2 实例
-
创建新的安全组
-
配置实例并启动
-
-
在新启动的 EC2 实例上安装、配置和启动 Solr
-
安装系统先决条件:Java 1.8 及更高版本
-
下载最新版本的 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 卷类型 作为 AMI。既有商业 AMI,也有基于社区的 AMI,例如 Amazon Linux AMI (HVM),SSD 卷类型,但这是一个适合我们目的的不错的 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 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}
-
将公共 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
-
-
在正在运行的 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.com
(solr-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.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 (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 集群配置。
-
下载 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
-
将目录更改为
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
文件以取消注释 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
-
启动 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-1 -z zookeeper-node:2181
如前所述,单个 ZooKeeper 节点不足以用于生产安装。有关在生产中部署 Solr 的更多信息,请参阅这些其他资源,一旦 EC2 实例启动并运行,就可以使用这些资源 |