【问题标题】:Solr 4 Adding Shard to existing ClusterSolr 4 将分片添加到现有集群
【发布时间】:2017-04-28 19:42:11
【问题描述】:

背景:我刚看完Apache Solr 4 Cookbook。作者在其中提到需要明智地设置分片,因为不能将新的分片添加到现有集群中。但是,这是使用 Solr 4.0 编写的,目前我使用的是 4.1。现在还是这样吗?我希望我没有找到这个issue,我希望有人可以告诉我。

问题:在 SolrCloud 集群中设置分片时,我是否需要知道我将来会存储多少数据? 我玩过Solandra 并阅读过elastic search,但老实说,我是 Solr 的粉丝(以及它的大型社区!)。我也喜欢动物园管理员。我现在卡住了还是有解决方法/补丁?

编辑:如果上面的问题是否定的,我可以用一堆(可能 100 个或更多)分片构建一个 SolrCloud 并让它们(内部)增长,而我增加我的数据,开始将它们一一剥离,然后放入更大、更快、资源更多的服务器中?

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    是的,当然可以。您必须设置一个指向同一个 zookeeper 实例的新 Solr 服务器。在引导期间,服务器连接到 zk ensemble 并将自己注册为集群成员。

    一旦注册过程完成,服务器就可以创建新内核了。您可以使用CoreAdmin 创建现有分片的副本。您也可以创建新的分片,但由于 Lucene 索引格式(并非所有字段都存储),它们不会被平衡,因为它可能没有所有文档信息来重新平衡集群,所以只有新的索引/更新的文档才能到达此服务器(不建议这样做)。

    当您设置 SolrCloud 时,您必须在创建集群时考虑到您的文档数量增长因素,因此如果您一开始有 100 万个文档并且它以 10k 文档/天的速度增长,请使用 5 个分片设置集群,所以在开始时您必须在两台机器的初始设置中托管此分片,但将来,您可以根据需要将新服务器添加到集群和move those shards to this new servers。注意不要让集群过度增长,因为在 Lucene 中,跨 5 个分片拆分的单个 20Gb 索引不会是每个分片中的 4Gb 索引。每个分片大约需要 (single_index_size/num_shards)*1.1(由于字典压缩)。这可能会根据您的术语频率而改变。

    您最后的机会是将新服务器添加到集群中,而不是向现有服务器添加新的分片/副本,而是使用您的新分片设置一个新的不同集合,并与这个新集合并行重新索引。然后,一旦你的重新索引过程完成,交换这个集合和旧的集合。

    【讨论】:

    • 感谢您的宝贵时间和回复,但是当您说“当然可以”时,实际上听起来您不能(或不应该),不是吗?
    • 不,您可以毫无问题地将服务器添加到主机分片(主),直到您达到 num_servers == numShards(集合创建参数)。考虑到您可以在需要时为现有分片添加新副本。仅当您尝试扩展 numShards 初始配置时,才会出现问题。
    • 抱歉耽搁了。是的,这是我的问题。我不知道我现在需要多少碎片。也许5..也许5,000。如果我想索引整个 www 怎么办?这需要多少个分片?这是我的困境。再次感谢您抽出宝贵时间。
    • “只有当你尝试增加 numShards 初始配置时才会出现问题”>>我的问题-我不知道我需要多少个分片-因此我的标题是:将分片添加到现有集群(不是副本 - 新分片)。我不知道我需要多少碎片。我希望能够添加它们并随着时间的推移扩展......我希望你是对的!我只是不完全理解你的答案......
    【解决方案2】:

    该问题的一个解决方案是在创建集合时使用“隐式路由器”。

    比方说 - 您必须将应用程序的所有“Audit Trail”数据索引到 Solr。每天都会添加新数据。您很可能希望按年分片。

    您可以在收藏集的初始设置期间执行以下操作:

    admin/collections?
    action=CREATE&
    name=AuditTrailIndex&
    router.name=implicit&
    shards=2010,2011,2012,2013,2014&
    router.field=year
    

    上面的命令: a) 创建 5 个分片 - 当前和最近 4 年各一个 2010,2011,2012,2013,2014 b) 根据“year”字段(指定为 router.field)的值将数据路由到正确的分片

    在 2014 年 12 月,您可以使用 CREATESHARD API(集合 API 的一部分)添加一个新的分片,为 2015 年做准备 - 执行以下操作:

    /admin/collections?
    action=CREATESHARD&
    shard=2015&
    collection=AuditTrailIndex
    

    上面的命令在同一个集合上创建一个新的分片。

    假设您的数据的“年份”字段正确填充到 2015 年,所有数据将在 2015 年自动索引到“2015”分片中。

    在 2015 年,如果您认为不需要 2010 分片(根据您的数据保留要求),您可以随时使用 DELETESHARD API 来执行此操作:

    /admin/collections?
    action=DELETESHARD&
    shard=2015&
    collection=AuditTrailIndex
    

    附:只有在创建集合时使用“隐式路由器”时,此解决方案才有效。当您使用默认的“compositeId 路由器”时不起作用 - 即使用 numshards 参数创建的集合。

    此功能真正改变了游戏规则 - 允许根据您不断增长的业务需求动态添加分片。

    【讨论】:

      猜你喜欢
      • 2019-05-10
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2011-12-03
      • 1970-01-01
      • 2021-10-15
      • 2021-09-15
      相关资源
      最近更新 更多