Solr的4添加碎片现有集群(Solr 4 Adding Shard to existing Clu

2019-08-16 20:16发布

背景:我刚刚读完了Apache Solr实现4食谱 。 在它的作者提到,设立碎片需要明智地做B / C新的不能被添加到现有集群。 然而,这是使用Solr的4.0和目前我使用4.1编写。 这仍然是这样吗? 我希望我没有发现这个问题 ,我希望有人能告诉我,否则。

问:我是希望知道有多少数据,我会在未来一SolrCloud群集中设置的碎片时存储? 我已经打了Solandra和读了弹性的搜索 ,但坦白地说,我的Solr的粉丝,因为它是(和它的大社区!)。 我也很喜欢动物园管理员。 难道我坚持现在还是有解决方法/补丁?

编辑:如果上面的问题是NO,我可以建立一个SolrCloud与一群(也许100或以上)的碎片,让他们成长(内部),而我长大我的数据开始脱皮他们一个接一个,放到更大,更快拥有更多资源的服务器?

Answer 1:

是的,当然可以。 你必须建立一个新的Solr服务器指向同一个动物园管理员实例。 在自举服务器连接到ZK合唱和寄存器本身作为集群成员。

一旦注册过程完成后,服务器就可以创建新的内核。 您可以使用现有的碎片的复制品CoreAdmin 。 你还可以创建新的碎片,但他们不会因Lucene索引格式(不是所有的字段存储)平衡,因为它可能没有所有的文档信息来重新平衡集群,因此,只有新的索引/更新的文档将得到这台服务器( 这样做是不推荐 )。

当您建立SolrCloud你必须创建群集考虑到您的文档数量增长的因素,所以如果你有第一个1M的文件和它的增长为10K文档/天,设置有5个碎片集群,因此在开始你必须举办这次碎片在两台机器初始设置,但在未来,根据需要,可以添加新的服务器集群和移动这些碎片到这个新的服务器 。 要小心,不要过度生长您群集,因为在Lucene的,单一的20Gb指数在5个碎片拆分不会在每一个碎片4Gb的指数。 每一个碎片约需(single_index_size / num_shards)* 1.1(由于字典压缩)。 这可能取决于你的词频变化。

你有最后一次机会是在新的服务器添加到集群和,而不是使用新的碎片和REINDEX在平行于这个新系列增加新的碎片/副本,以现有的服务器,建立一个新的不同的集合。 然后,一旦你重新索引过程完成后,交换这个集合和旧的。



Answer 2:

一个解决问题的方法是创建集合时使用“隐含的路由器”。

比方说 - 你要索引你的应用程序到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)中的路由数据,以基于“年”字段的值的正确碎片(指定为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

PS如果您在建立集合时,使用了“隐路由器”这个解决方案仅适用。 与numshards参数创建即集合 - 当您使用默认的“compositeId路由器”不起作用。

这个功能确实是一个改变游戏规则 - 允许碎片添加动态根据您的业务不断增长的需求。



文章来源: Solr 4 Adding Shard to existing Cluster
标签: solr lucene