跨多台机器扩展 solr 集合

Extending a solr collection across multiple machines

我正在尝试建立一个跨多个服务器的 solr 集合。如果我对事物的理解是正确的,我可以建立一个由碎片组成的集合。这些分片由副本组成,对应于核心。请纠正我对此的理解中的任何漏洞。

好的。

所以我已经设置了 solr,并且能够通过这样做在第一台机器上创建一个集合。

bin/solr create_collection -c test_collection -shards 2 -replicationFactor 2 -d server/solr/configsets/basic_configs/conf

这似乎做对了,我可以检查健康状况并看到一些东西。我输入

bin/solr healthcheck -c test_collection

看到分片信息

现在我想做的,也是我坚持的部分,是获取我创建的这个集合,并将其扩展到多个服务器。我不确定我是否理解它是如何正确工作的,但我想我想做的是将 shard1 放在 machine1 上,将 shard2 放在 machine2 上。

我无法根据文档真正弄清楚如何执行此操作,尽管我很确定这就是 SolrCloud 旨在解决的问题。有人可以用这个……给我一个正确的方向吗?跨多个服务器扩展集合的方法或不这样做的原因。

当您说 -shards 2 时,您是在说您希望 collection 已经拆分到两个服务器上。 -replicationFactor 2 表示您希望这些分片也存在于至少两台服务器上。

分片是 collection 的一部分 - 没有分片,您将无法访问所有文档。 replicationFactor 指示在 collection 中应该使同一个分片(或 "partition" 有时用于表示索引的片段)有多少副本可用,因此两个分片有两个副本将结束最多有四个 "cores" 分布在可用服务器上(这些 "cores" 由 Solr 内部管理)。

在同一个集群中启动一组新的 SolrCloud 实例,您应该会看到文档按预期分布在您的节点上。

如前所述,分片是实际服务器中 collection(数据)的一部分。

当您 运行 命令时,您要求 collection 将在那个时间点分成 2 台机器。

一旦您将更多机器添加到组合中(通过将它们注册到同一个 zookeeper),您可以使用 collection API 来管理它们并将它们添加到折叠中。

https://cwiki.apache.org/confluence/display/solr/Collections+API

您可以将分片拆分为 2 个(或更多)新分片。

您可以创建新的分片,也可以删除分片。

当然的问题 - 文档如何在碎片之间拆分?

创建collection时,可以定义一个router.name

router.name  - The router name that will be used. 
The router defines how documents will be distributed among the shards. 
The value can be either implicit, which uses an internal default hash, 
or compositeId, which allows defining the specific shard to assign documents to.     
When using the 'implicit' router, the shards parameter is required. 
When using the 'compositeId' router, the numShards parameter is required.
For more information, see also the section Document Routing.

这意味着您可以定义分片的数量(就像您所做的那样)或采用完全不同的方法,通过文档 ID 中的前缀来区分分片。

有关第二种方法的更多信息,请参阅:https://cwiki.apache.org/confluence/display/solr/Shards+and+Indexing+Data+in+SolrCloud#ShardsandIndexingDatainSolrCloud-DocumentRouting