当前位置: 首页 > 知识库问答 >
问题:

Solr 4将碎片添加到现有集群

龙德义
2023-03-14

背景:我刚刚读完Apache Solr 4 Cookbook。作者在其中提到需要明智地设置分片b/c新分片不能添加到现有集群中。但是,这是使用Solr 4.0编写的,目前我正在使用4.1。情况仍然如此吗?我希望我没有发现这个问题,我希望有人能告诉我其他情况。

问:在SolrCloud集群中设置分片时,我是否应该知道我将来会存储多少数据?我玩过Solandra并阅读了弹性搜索,但老实说,我是Solr的粉丝(以及它的大型社区!)。我也喜欢ZooKeer。我现在卡住了还是有变通方法/补丁?

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

共有2个答案

高锦
2023-03-14

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

假设-您必须将应用程序的所有“审计跟踪”数据索引到Solr中。每天都会添加新数据。您可能最想按年份分片。

在收藏的初始设置过程中,您可以执行以下操作:

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

上面的命令:a)创建5个碎片-当前和过去4年各一个,201020112201321014 b)根据“年份”字段(指定为router.field)的值将数据路由到正确的碎片

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

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

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

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

2015年,如果您认为不需要2010年的shard(基于您的数据保留要求),您可以始终使用DELETESHARD API来实现这一点:

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

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

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

燕富
2023-03-14

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

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

当您设置SolrCloud时,您必须考虑到文档数量的增长因素来创建集群,因此,如果您最初有100万个文档,并且文档数量增长为每天10000个文档,请使用5个碎片来设置集群,因此在开始时,您必须在两台机器中托管此碎片初始设置,但在将来,根据需要,您可以向集群添加新服务器,并将这些碎片移动到此新服务器。小心不要过度扩展集群,因为在Lucene中,一个20Gb的索引在5个碎片上分割,并不是每个碎片都有4Gb的索引。每个shard大约需要(single\u index\u size/num\u shard)*1.1(由于字典压缩)。这可能会根据您的术语频率而变化。

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

 类似资料:
  • 我有三个片段F1 F2 F3 F4都可以从侧边栏访问。 这四个都可以在任何时间以任何顺序调用, 现在我想知道,如果已经单击(创建)了F1,则不再创建F1,而只使用片段管理器将片段F1带回到前面。所有其他片段相同 到目前为止,我对容器中的每个片段都尝试了这种方法(片段活动) 如果部分确保不再重新创建片段(如果已经创建),那么我应该在部分中写些什么,以便可以将已经创建的片段放在视图层次结构的前面 请帮

  • 我有一个现有的Solr设置,运行在一个独立的Solr实例上。我被要求为此设置添加弹性和高可用性。因此,我想将复制添加到我的设置中,我认为SolrCloud是一种方式? 我已经在SolrCloud wiki上浏览了演示。然而,我不确定如何将现有的Solr实例添加到ZooKeeper,然后再添加一些节点以供复制。这是否可以不重新膨胀? 维基上说 注意:如果不使用示例启动solr,请确保在创建集合之前将

  • 了解如何将照片添加到 Lightroom 以进行编辑、整理和分享。 将照片添加到 Lightroom 的过程包括几个简单的步骤。 注意:在移动设备上使用 Lightroom?请参阅在 Lightroom for mobile (Android) 中导入照片以及在 Lightroom for mobile (iOS) 中导入照片。 Lightroom 会生成导入的照片的副本,并将全分辨率的原始照片上

  • 我有一个名为的现有表。在这个表中,我有5列: persionId 人名 PMid 描述 Pamt 创建此表时,我将和设置为主键。 我现在想在主键中再包含一列——PMID。我如何编写一个语句来做到这一点?(表中已经有1000条记录了)

  • 在我的片段中,我想在加载一些数据后干杯,如下所示: 这只有在片段仍然附加到活动的情况下才有意义,即片段是可见的,而getActive()不会返回null。 我可以用或使用isAdded(),对吗?在这里,我想知道这两种方法之间的区别是什么,我最好使用哪一种?

  • 错误: 致命异常:main java。java上的lang.NullPointerException。木卫一。文件java上的fixSlashes(File.java:185) 。木卫一。文件(文件:java:134)在ua。罗曼波塔普斯基。安提霍克。普罗卡顿。交付活动。ua的galleryAddPic(DeliverActivity.java:308)。罗曼波塔普斯基。安提霍克。普罗卡顿。交付活