如何在没有SPLITSHARD的情况下动态地向SolrCloud添加节点?

时间:2015-06-16 05:56:27

标签: solr solrcloud

我已经设置了 SolrCloud 4个分片。我向SolrCloud添加了8个节点(4个领导者和4个副本)。每个节点都在不同的机器上运行。但后来我发现我的数据越来越多(每天 400万个文件),所以我的4个分片是不够的。所以,我想动态地向这个SolrCloud添加一个分片。当我添加一个创建为副本的新节点时,这不是我想要的。当我在Google中搜索此内容时,我得到的答案是使用 Collection API SPLITSHARD 。如果我使用SPLITSHARD将拆分已存在的碎片。但是我的要求是向此SolrCloud添加新分片。怎么做?

任何建议将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

答案隐藏在SolrCloud文档中。请参阅https://cwiki.apache.org/confluence/display/solr/Nodes,+Cores,+Clusters+and+Leaders“调整群集大小”部分

基本上这个过程是

  1. 拆分碎片 - 现在你将在那台机器上有两个碎片
  2. 在新计算机上设置此新分片的副本
  3. 从原始计算机中删除新分片。 ZooKeeper会将副本提升为该分片的领导者。
  4. 为新分片设置副本
  5. 非常kludgy和手动过程。 SolrCloud不是很“多云”,即有弹性。

答案 1 :(得分:0)

当您第一次创建集合时,您做出了一个非常重要的决定,这是一种分片技术。 Solr提供了两种不同的方式,隐式 compositeId

如果将其设置为 compositeId ,这意味着您希望solr根据您选择的字段(或默认情况下的id)计算分片,Solr将计算32位整数哈希值key基于该字段,并为每个分片分配一个范围。您还需要提前指定分片数。因此,solr将为每个分片分配一系列32位整数值,并根据哈希值将文档路由到正确的分片。例如,如果将其设置为4个分片,并且哈希键恰好位于32位范围的第一个四分之一,那么它将转到第一个分片,依此类推......

通过这种方式,您无法在以后更改分片数。因为这将破坏整个结构,您仍然可以将一个范围拆分为两个单独的子范围。但你不能只扩展现有的结构。

第二种方式,即隐式,您不必事先指定分片数,但是在应用程序中手动进行分片,并提供名称为因此,solr可以直接路由文档而无需计算任何东西。通过这种方式,您可以在将来创建任意数量的分片而不会影响现有分片,您只需按名称创建一个新分片,您的应用程序将开始使用新名称填充未来的文档。

因此,在您的情况下,如果您已经选择了compositeId,则无法添加分片,您只能分割现有分片。如果你认为你的分片将来会发生很大变化,我建议你使用隐式分片重新构建你的云。

查看Solr collection Api了解更多详情:https://cwiki.apache.org/confluence/display/solr/Collections+API