【问题标题】:How to add a node to SolrCloud dynamically without SPLITSHARD?如何在没有 SPLITSHARD 的情况下动态地将节点添加到 SolrCloud?
【发布时间】:2015-06-16 05:56:27
【问题描述】:

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

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

【问题讨论】:

    标签: solr solrcloud


    【解决方案1】:

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

    基本上流程是

    1. 拆分一个分片 - 现在您将在一台机器上拥有两个分片
    2. 在您的新机器上设置此新分片的副本
    3. 从原来的机器上移除新的分片。 ZooKeeper 会将副本提升为该分片的领导者。
    4. 为该新分片设置副本

    非常笨拙和手动的过程。 SolrCloud 不是很“多云”,即弹性。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 2021-05-25
        • 2016-12-13
        • 1970-01-01
        • 2016-10-13
        相关资源
        最近更新 更多