如何管理非常大的 Solr 索引

Posted

技术标签:

【中文标题】如何管理非常大的 Solr 索引【英文标题】:How to manage very large Solr indexes 【发布时间】:2015-06-15 22:17:07 【问题描述】:

我正在尝试规划 SolrCloud 实施,并且根据测试得出的当前索引大小,我估计 10 亿个文档的物理索引大小约为 20 TB。到目前为止,我一直找不到可以支持这种大小的单个卷的云主机。我希望有人可以就管理这么大的索引提供一些指导。 20TB 的索引是荒谬的吗?关于 SolrCloud 架构,我有什么遗漏吗?我看到的大多数指南都表明,无论分片数量如何,都应该在每台机器上复制整个索引以保证冗余,因此每个节点都需要 20TB 的存储设备。如果有人能提供一些启示,我将不胜感激。

【问题讨论】:

【参考方案1】:

不确定您在哪里阅读过此类指南?

在每个分片中只保留部分索引是完全正常的(每个分片有一个主分片和多个副本)。

您需要研究如何对索引进行分片,使用基于哈希的内置路由或提供您自己的路由。

编辑:所以如果我理解正确,您假设集群中的每个节点都必须具有每个分片的主节点或副本,对吗?如果是这样,答案是否定的。为了提供弹性,您需要在集群中的某个位置拥有每个分片的主/副本,但您可以拥有一个不包含来自分片 S 的任何内容的节点 N,只要 S 有一个主节点和一个副本(至少) 在其他节点中。

【讨论】:

我想我没有说清楚。我知道索引被分成碎片。我的观点是,这些分片中的每一个都通过在不同的机器上可用而变得多余。如果我有一个索引,分成 4 个分片,并且我的集群中有 3 个节点,则 3 个节点中的每一个节点都具有 4 个分片的主节点或副本。因此,从技术上讲,每个节点都有可用的整个索引,而不管分片的数量。如果机器上既没有主分片也没有分片副本,那么您就失去了故障转移,对吧? @LandonC 试图在编辑中回复您的问题 我完全理解您的编辑,这就是我要问的:人们如何处理这种大小的索引?我已经彻底研究了 SolrCloud,并且我知道您没有必须在每个节点上都有完整的索引。我试图确定常见的做法是什么。如果您使用 Google SolrCloud,您找到的每个图表都将指示我提到的标准设置:在每个节点上完全复制所有分片。我试图了解人们在标准之外的真实世界架构。 我猜你看到的是选择一个非常简单(2/3 节点 2/3 分片)示例来绘制图表以进行解释的副作用......

以上是关于如何管理非常大的 Solr 索引的主要内容,如果未能解决你的问题,请参考以下文章

Solr的工作原理以及如何管理索引库

如何通过索引从一个非常大的列表中有效地删除元素?

如何使用 Solr 管理“分页”?

我可以将搜索引擎(solr搜索或lucene搜索)集成到Maximo中吗?

如何在solr中获取lucene索引的版本

如何使用Solr索引MySql数据库