Zookeeper的Solr中的Zookeeper超时没有错误

时间:2018-12-19 12:36:34

标签: solr apache-zookeeper solrj solrcloud

solr / zookeeper面临的问题是,动物园管理员在10000毫秒后超时。错误如下。

SolrException: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper <server1>:9181,<server2>:9182,<server2>:9183 within 10000 ms.
at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:184)
at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:121)

我们的Zookeeper日志没有任何错误。除了下面的日志

2018-12-19 04:35:22,305 [myid:2] - INFO  [SessionTracker:ZooKeeperServer@354] - Expiring session 0x200830234de3127, timeout of 10000ms exceeded
2018-12-19 05:35:38,304 [myid:2] - INFO  [SessionTracker:ZooKeeperServer@354] - Expiring session 0x200b4f912730086, timeout of 10000ms exceeded

在问题期间,线程数量很高,我们可能会在下面的weblogic服务器中注意到这一点。

Name: Connection evictor
State: TIMED_WAITING
Total blocked: 0  Total waited: 1
Stack trace: 
java.lang.Thread.sleep(Native Method)
org.apache.http.impl.client.IdleConnectionEvictor$1.run(IdleConnectionEvictor.java:66)
java.lang.Thread.run(Thread.java:748)

这里可能出什么问题了?

1 个答案:

答案 0 :(得分:0)

以我的经验,ZK超时几乎总是归因于Solr节点上的某件事,而不是ZK中的问题。

您没有提供所有时间戳,但理论是:

  1. Solr由于某种原因无法发送心跳
  2. ZK假定客户端已离开并关闭连接
  3. Solr尝试使用ZK关闭的连接

那么Solr节点为什么无法发送心跳?这可能是因为Solr节点只是过载(线程尖峰是原因,还是症状?),或者只是经过很长的GC暂停也可以做到这一点。