Solr云:等待4000毫秒后没有找到注册的领导者

时间:2017-12-18 12:40:56

标签: solr apache-zookeeper solrcloud

我创建了6个集合,每个集合有3个分片和2个副本(solr版本5.5.0)。几天我的设置工作正常。但几天后我收到以下错误:

  

尝试恢复时出错。   核心= Collection1_shard3_replica2:org.apache.solr.common.SolrException:   在等待4000毫秒后没有找到注册的领导者,收集:   Collection1切片:shard3 at   org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:607)     在   org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:593)     在   org.apache.solr.cloud.RecoveryStrategy.doRecovery(RecoveryStrategy.java:308)     在   org.apache.solr.cloud.RecoveryStrategy.run(RecoveryStrategy.java:224)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     在java.util.concurrent.FutureTask.run(FutureTask.java:266)at   org.apache.solr.common.util.ExecutorUtil $ MDCAwareThreadPoolExecutor $ 1.run(ExecutorUtil.java:231)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)

我尝试重新启动zookeeper和solr两者,也将堆内存增加到10 GB。但仍然有问题。

1 个答案:

答案 0 :(得分:0)

我们遇到了与3节点机器相同的问题(每个节点6个CPU和30GB内存)。以下是我试图找到解决方案的步骤。

我们已经尝试过但没有用过的东西:

  1. 停止solr进程并重新启动
  2. 增加/减少Solr JVM的内存
  3. 重新开始收藏,但这只是一天左右的临时修复
  4. Solr GC调整: https://wiki.apache.org/solr/SolrPerformanceProblems#GC_pause_problems
  5. 是什么原因解决了"没有注册的领导者发现":

    1. 减少了碎片的数量,基本上我们是过度钻孔。我们将碎片的数量从6个减少到3个碎片并保留3个副本。这意味着每个节点现在有3个分片。
    2. 但是,因为我们每秒索引10.000条消息。我也想知道我们的CPU在做什么。所以我监控了cpu负载和cpu IO。我发现CPU一直在最大限度地工作,导致IO等待很高,我认为这会造成最大的麻烦(见下图)。
    3. 由于这种高IO等待,副本很难保持同步。 我减少了工作量(发送给solr的消息),因此索引没有像以前那样快速增长。这有助于使一切恢复正常。我的Solr集群现在已经绿色了一段时间,并没有遇到任何选举问题"。 IO等待时间降至25毫秒以下,CPU使用率约为70%,而不是几乎100%。

      通常,解决这样的问题非常困难。由于Solr集群可能会工作几天(甚至在其他帖子中看到几个月)。监控IO等待甚至流量进入Solr节点。如果出现流量高峰,(每日!)指数可能会变得过大。您还可以添加更多节点和拆分分片,从而减少一台计算机的负载。我选择减少Solr机器的流量,因为我们使用Solr作为审计存储,并且不需要部分审计日志记录。

      CPU load on one of the Solr Hosts enter image description here