【问题标题】:Elasticsearch: exception caught on transport layerElasticsearch:传输层捕获的异常
【发布时间】:2016-03-13 16:58:02
【问题描述】:

将 Elasticsearch 从 1.6 版升级到 2.1 版后,我在我的 Java 应用程序中看到一个错误。

该应用程序以前使用 Java,但现在连接立即终止,结果在应用程序中引发了类似的错误 (org.elasticsearch.client.transport.NoNodeAvailableException)。

这一切都发生在第一次连接尝试期间,这表明版本之间存在冲突,但也可能是其他问题。

具体是什么,除了改版本还有什么办法可以解决?

elasticsearch.log:

[2015-12-08 17:42:54,035][WARN ][transport.netty          ] [Lorna Dane] exception caught on transport layer [[id: 0x9f75ad33, /192.168.0.208:21248 => /192.168.0.140:9300]], closing connection
java.lang.IllegalStateException: Message not fully read (request) for requestId [0], action [cluster/nodes/info], readerIndex [39] vs expected [57]; resetting
        at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:120)
        at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
        at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
        at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
        at org.elasticsearch.common.netty.OpenChannelsHandler.handleUpstream(OpenChannelsHandler.java:75)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
        at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
        at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
        at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
        at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
        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)

Java 控制台:

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:298)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214)
    at org.elasticsearch.client.transport.support.InternalTransportClusterAdminClient.execute(InternalTransportClusterAdminClient.java:85)
    at org.elasticsearch.client.support.AbstractClusterAdminClient.state(AbstractClusterAdminClient.java:138)
    at org.elasticsearch.action.admin.cluster.state.ClusterStateRequestBuilder.doExecute(ClusterStateRequestBuilder.java:94)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)

【问题讨论】:

  • 您的集群由哪些节点组成?您是否升级了所有 ES 节点并重新索引您的数据?
  • 这只是我要连接的一个实例。它已升级,数据尚未移动,这就是应用程序的用途。
  • 您是否删除了 IDE 中的 prev jar 文件以支持新的 Elastic jar 文件以正确连接到新版本?您是否在新版本中设置了集群名称?
  • 不,我没有。移动它们是有意义的。

标签: java parsing elasticsearch jboss transport


【解决方案1】:

确保让 elasticsearch 客户端库 jar 与您的集群版本保持同步。

例如在使用 Maven 时:

 <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>2.1.0</version>
 </dependency>

【讨论】:

  • 这可能是问题所在,快速检查后我注意到我的pom.xml 使用的是版本。 1.3.2.
  • @Peter:我从这里下载了 es 文件 -- sudo wget download.elasticsearch.org/elasticsearch/elasticsearch/… --- 不知道在哪里可以找到 pom.xml 文件
  • @user1050619 只有当您使用Maven 管理应用程序依赖项时,此 pom.xml 才相关。如果您手动处理 jar 文件,只需确保客户端 jar 与您正在运行的 elasticsearch 集群具有相同的版本。
【解决方案2】:

任何 >2.x 的 Elasticsearch 实例都会发生这种情况,只要有一台 1.x 机器在同一网络上寻找集群(它发送错误的协议信息)。从技术上讲,您可以忽略它(它只是让您知道 1.x 机器尝试连接但连接无效),但是如果您不理会它太久,您的日志可能会填满等。

最好的解决方案是将旧的 1.x 节点与新节点隔离,直到完成升级。

见:https://github.com/elastic/elasticsearch/issues/14400

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多