SolrCloud 入门

SolrCloud 旨在为在多个服务器上分发索引内容和查询请求提供高可用性、容错的环境。

它是一个系统,其中数据被组织成多个部分或分片,这些分片可以托管在多台机器上,副本为可伸缩性和容错提供冗余,以及一个 ZooKeeper 服务器,用于帮助管理整体结构,以便可以正确路由索引和搜索请求。

本节详细解释了 SolrCloud 及其内部工作原理,但在您深入了解之前,最好先了解您要完成的目标。

本页提供了一个简单的教程,以 SolrCloud 模式启动 Solr,以便您可以开始了解在索引和提供查询时分片如何相互交互。为此,我们将使用在单台机器上配置 SolrCloud 的简单示例,这显然不是真正的生产环境,真正的生产环境将包括多个服务器或虚拟机。在真正的生产环境中,您还将使用真实的机器名称,而不是我们在此处使用的“localhost”。

在本节中,您将学习如何使用启动脚本和特定的配置集启动 SolrCloud 集群。

本教程假设您已经熟悉使用 Solr 的基本知识。如果您需要复习,请参阅Solr 教程,以了解 Solr 概念的基础知识。如果您作为该练习的一部分加载文档,则应该重新开始,为这些 SolrCloud 教程使用全新的 Solr 安装。

出于安全原因,默认情况下,Solr 节点仅接受来自 localhost 的连接。使用多个节点设置 SolrCloud 部署的管理员必须覆盖此设置。有关更多详细信息,请参阅网络配置部分。

SolrCloud 示例

交互式启动

bin/solr 脚本使您可以轻松开始使用 SolrCloud,因为它会引导您完成以 SolrCloud 模式启动 Solr 节点并添加集合的过程。要开始,只需执行

$ bin/solr start -e cloud

这将启动一个交互式会话,引导您完成设置带有嵌入式 ZooKeeper 的简单 SolrCloud 集群的步骤。

脚本首先询问您要在本地集群中运行多少个 Solr 节点,默认值为 2。

Welcome to the SolrCloud example!

This interactive session will help you launch a SolrCloud cluster on your local workstation.
To begin, how many Solr nodes would you like to run in your local cluster? (specify 1-4 nodes) [2]

该脚本支持启动最多 4 个节点,但我们建议您在刚开始时使用默认值 2。这些节点将都存在于单台机器上,但将使用不同的端口来模拟在不同服务器上的操作。

接下来,脚本会提示您输入要将每个 Solr 节点绑定到的端口,例如

 Please enter the port for node1 [8983]

为每个节点选择任何可用的端口;第一个节点的默认端口为 8983,第二个节点的默认端口为 7574。该脚本将按顺序启动每个节点,并显示用于启动服务器的命令,例如

$ bin/solr start --cloud -s example/cloud/node1/solr -p 8983

第一个节点还将启动一个绑定到端口 9983 的嵌入式 ZooKeeper 服务器。第一个节点的 Solr 主目录位于 example/cloud/node1/solr 中,如 -s 选项所示。

在启动集群中的所有节点后,脚本会提示您输入要创建的集合的名称。

 Please provide a name for your new collection: [gettingstarted]

建议的默认名称是 "gettingstarted",但您可能需要选择更适合您的特定搜索应用程序的名称。

接下来,脚本会提示您输入将集合分布到的分片数量。 SolrCloud 分片和索引 将在稍后更详细地介绍,因此,如果您不确定,我们建议使用默认值 2,以便您了解集合如何在 SolrCloud 集群中的多个节点上分布。

接下来,脚本将提示您输入为每个分片创建的副本数量。同样,这将在本指南的后面部分进行更详细的介绍,因此,如果您不确定,请使用默认值 2,以便您了解 SolrCloud 中如何处理复制。

最后,脚本会提示您输入集合的配置目录名称。您可以选择 _defaultsample_techproducts_configs。配置目录从 server/solr/configsets/ 中提取,因此如果您愿意,可以事先查看它们。当您仍在为文档设计架构并且在尝试 Solr 时需要一些灵活性时,_default 配置非常有用,因为它具有无模式功能。但是,在创建集合后,可以禁用无模式功能以锁定架构(以便在此之后索引的文档不会更改架构)或自行配置架构。这可以通过以下方式完成(假设您的集合名称是 mycollection

  • V1 API

  • V2 API SolrCloud

$ curl http://host:8983/solr/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
$ curl http://host:8983/api/collections/mycollection/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'

此时,您应该在本地 SolrCloud 集群中创建了一个新集合。要验证这一点,您可以运行 status 命令

$ bin/solr status

如果您在此过程中遇到任何错误,请查看 example/cloud/node1/logsexample/cloud/node2/logs 中的 Solr 日志文件。

您可以通过访问 Solr Admin UI 中的云面板来查看您的集合如何在集群中部署:https://127.0.0.1:8983/solr/#/~cloud。Solr 还提供了一种使用 healthcheck 命令对集合执行基本诊断的方法

$ bin/solr healthcheck -c gettingstarted

healthcheck 命令收集有关集合中每个副本的基本信息,例如文档数量、当前状态(活动、关闭等)和地址(副本在集群中的位置)。

现在可以使用 Post Tool 将文档添加到 SolrCloud。

要停止 SolrCloud 模式下的 Solr,您可以使用 bin/solr 脚本并发出 stop 命令,如下所示

$ bin/solr stop --all

使用 --no-prompt 启动

您还可以使用以下命令启动 SolrCloud,并使用所有默认值而不是交互式会话

$ bin/solr start -e cloud --no-prompt

重启节点

您可以使用 bin/solr 脚本重启 SolrCloud 节点。例如,要重启在端口 8983 上运行的 node1(带有嵌入式 ZooKeeper 服务器),您需要执行以下操作

$ bin/solr restart -c -p 8983 -s example/cloud/node1/solr

要重启在端口 7574 上运行的 node2,您可以执行以下操作

$ bin/solr restart -c -p 7574 -z localhost:9983 -s example/cloud/node2/solr

请注意,在启动 node2 时,您需要指定 ZooKeeper 地址(-z localhost:9983),以便它可以加入 node1 的集群。

向集群添加节点

向现有集群添加节点稍微高级一些,需要对 Solr 有更多了解。使用启动脚本启动 SolrCloud 集群后,您可以通过以下方式向其添加新节点

$ mkdir <solr.home for new Solr node>
$ bin/solr start --cloud -s <solr.home>/solr -p <port num> -z <zk hosts string>

请注意,以上操作需要您创建一个 Solr 主目录。

示例(带目录结构),它将一个节点添加到使用 "bin/solr start -e cloud" 启动的示例

$ mkdir -p example/cloud/node3/solr
$ bin/solr start --cloud -s example/cloud/node3/solr -p 8987 -z localhost:9983

之前的命令将在端口 8987 上启动另一个 Solr 节点,并将 Solr 主目录设置为 example/cloud/node3/solr。新节点会将其日志文件写入 example/cloud/node3/logs

一旦您熟悉了 SolrCloud 示例的工作方式,我们建议您使用 将 Solr 投入生产 中描述的过程来在生产环境中设置 SolrCloud 节点。