Solr云:等待4000ms后未找到注册的领导者

我已经创建了6个集合,每个集合有3个分片和2个副本(solr版本5.5.0)。几天后我的设置工作正常。但几天之后,我收到以下错误:Solr云:等待4000ms后未找到注册的领导者

Error while trying to recover. core=Collection1_shard3_replica2:org.apache.solr.common.SolrException: No registered leader was found after waiting for 4000ms , collection: Collection1 slice: shard3 at org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:607) at org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:593) at org.apache.solr.cloud.RecoveryStrategy.doRecovery(RecoveryStrategy.java:308) at org.apache.solr.cloud.RecoveryStrategy.run(RecoveryStrategy.java:224) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor$1.run(ExecutorUtil.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

我试图重新启动饲养员和Solr都,也增加堆内存10 GB。但仍然有问题。

回答:

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

我们已经尝试过,并没有工作:

  1. 停止Solr的进程并重新启动Solr的JVM
  2. 重新收集
  3. 增加/减少内存,但是这只是暂时的修复一天左右
  4. Solr GC调整: https://wiki.apache.org/solr/SolrPerformanceProblems#GC_pause_problems

什么固定的“没有注册的领导者发现”问题:

  1. 减少碎片的数量,基本上我们oversharding。我们将碎片的数量从6个减少到3个,并保留了3个副本。这意味着每个节点现在有3个碎片。
  2. 但是,因为我们每秒钟编制了10,000条消息的索引。我也想知道我们的CPU在做什么。所以我监视了CPU负载和CPU IO。我发现CPU一直在最大限度地工作,造成了很高的IO等待时间,我认为这造成了最大的麻烦(见下图)。

由于IO等待时间很长,复制品很难保持同步。 我减少了工作量(发送到solr的消息),以便索引不像以前那样快速增长。这有助于使一切恢复正常。我的Solr集群现在是绿色的一段时间,并没有遇到任何“选举问题”。 IO等待时间减少到25ms以下,CPU使用率约为70%,而不是几乎100%。

一般来说,解决这样的问题是非常困难的。由于Solr集群可能会在几天内正常工作(甚至在其他帖子中看过几个月)。监视进入Solr节点的IO等待甚至流量。如果发生交通峰值,(每日!)指数可能变得太大。您也可以添加更多节点和分割碎片,这可以减少一台机器的负载。我选择减少流向Solr机器的流量,因为我们使用Solr作为审计存储,并且不需要审计日志的一部分。

以上是 Solr云:等待4000ms后未找到注册的领导者 的全部内容, 来源链接: utcz.com/qa/263392.html

回到顶部