首页 文章

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

提问于
浏览
2

我已设置 SolrCloud 有4个分片 . 我向SolrCloud添加了8个节点(4个领导者和4个副本) . 每个节点都在不同的机器上运行 . 但后来我发现我的数据越来越多(每天 4 million 文件),所以我的4个分片是不够的 . 所以,我想动态地向这个SolrCloud添加一个分片 . 当我添加一个创建为副本的新节点时,这不是我想要的 . 当我在谷歌搜索这个时,我得到的答案是使用 Collection API SPLITSHARD . 如果我使用SPLITSHARD将 split the already existed shard . 但在这里,我的要求是 add new shard to this SolrCloud . 这该怎么做?

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

2 回答

  • 0

    答案隐藏在SolrCloud文档中 . 见https://cwiki.apache.org/confluence/display/solr/Nodes,+Cores,+Clusters+and+Leaders部分'Resizing a Cluster'

    基本上这个过程是

    • 拆分碎片 - 现在你将在那台机器上有两个碎片

    • 在新计算机上设置此新分片的副本

    • 从原始计算机中删除新分片 . ZooKeeper会将副本提升为该分片的领导者 .

    • 为该新分片设置副本

    非常kludgy和手动过程 . SolrCloud不是很“多 Cloud ”,即有弹性 .

  • 1

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

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

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

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

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

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

相关问题