【发布时间】:2015-03-24 03:27:32
【问题描述】:
在我们的压力环境中,我们有一个 solr 云服务器集群,其中包含 10 个分片和每个分片中的 4 个副本。在我们的 prod 环境中,我们将有 10 个分片和每个分片中的 15 个副本。我们当前的提交设置如下
*<autoSoftCommit>
<maxDocs>500000</maxDocs>
<maxTime>180000</maxTime>
</autoSoftCommit>
<autoCommit>
<maxDocs>2000000</maxDocs>
<maxTime>180000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>*
我们索引了大约 9000 万份文档。我们有两种不同的方式来索引文档 a) 全索引。索引 9000 万个文档需要 4 小时,并且到达搜索者的文档速率约为每秒 6000 个 b) 增量索引。索引增量更改需要一个小时。大约有 300 万次更改,进入搜索者的文档速率为每秒 2500 个
我们有两个集合 search1 和 search2。当我们进行完整索引时,我们在 search2 集合中进行,而 search1 正在服务实时流量。完成后,我们使用别名交换集合,以便 search2 集合提供实时流量,而 search1 可用于下一次完整的索引运行。 当我们进行增量索引时,我们会在提供实时流量的 search1 集合中进行。
我们所有的搜索者都有 12 GB 的可用 RAM,并拥有四核 Intel(R) Xeon(R) CPU X5570 @ 2.93GHz 我们在触发索引时观察到以下问题。 在我们在 14 个并行主机上触发索引后大约 10 分钟,副本进入恢复模式。这发生在所有分片上。在大约 20 分钟内,越来越多的副本开始进入恢复模式。大约半小时后,除了领导者之外的所有副本都处于恢复模式。我们不能限制索引负载,因为这会增加我们的整体索引时间。因此,为了克服这个问题,我们在触发索引之前删除所有副本,然后在索引完成后将它们添加回来。
当我们进行增量索引时,我们观察到副本进入恢复的相同行为。我们无法在增量索引期间删除副本,因为它也在为实时流量提供服务。我们试图限制索引速度,但集群仍处于恢复状态。
如果我们让集群保持原样,当索引完成时,它最终会在一段时间后恢复。由于它提供实时流量,我们不能让这些副本进入恢复模式,因为它也会降低搜索性能,我们的测试表明。
我们尝试了不同的提交设置,如下所示
a) 没有自动软提交,没有自动硬提交和触发提交
在索引结束时
b)没有自动软提交,是自动硬
提交和索引结束时的提交
c) 是自动软提交,没有自动硬提交
d) 是的自动软提交,是的自动硬提交
e) 以上提交的不同频率设置
不幸的是,以上所有行为都产生了相同的行为。副本仍在恢复中 我们已将 zookeeper 超时时间从 30 秒增加到 5 分钟,但问题仍然存在。 有什么设置可以解决这个问题吗?
【问题讨论】:
-
我们所有的搜索者都有 12 GB 的可用 RAM 和四核 Intel(R) Xeon(R) CPU X5570 @ 2.93GHz。只有一个 java 进程在运行,即其中的 jboss 和 solr。所有 12 GB 都可用作 Java 进程的堆。我们观察到 java 进程的堆内存平均约为 8 - 10 GB。所有搜索器的最终索引大小为 9 GB。所以总共有 9X10(分片)= 90GB 的索引文件。请注意,我们已经尝试了 15 分钟软提交设置和 30 分钟硬提交设置。两者的时间设置相同,30 分钟软提交和一小时硬提交设置。
-
很抱歉我发布了错误的信息。我错误地发布了我们的 DEV 环境配置。在仔细检查了我们发现原始问题的压力和 Prod Beta 环境后,我发现所有搜索者都有大约 50 GB 的可用 RAM 和两个正在运行的 JVM 实例(2 个不同的端口)。两个实例都分配了 12 GB。其余 26 GB 可用于操作系统。主机上的第一个实例具有 search1 集合(实时集合),同一主机上的第二个实例具有 search2 集合(用于完整索引)。
-
你有没有运气解决这个@vijay?我们的 solrcloud 集群也遇到了类似的问题,除了每次优化集合时副本都会进入恢复状态。
-
@VijaySekhri 你能解决这个问题吗?我们最终面临着类似的问题。
标签: solr indexing lucene recovery solrcloud