Elasticsearch:在传输层捕获异常

3
升级 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节点并重新索引了数据? - Chris
我只是连接到一个单一的实例。它已经升级了,数据还没有移动,这就是应用程序的作用。 - Peter G.
你在IDE中删除了旧的jar文件,使用新的Elastic jar文件以正确连接到新版本吗?你设置了新版本中的集群名称吗? - Chris
不,我没有。把它们移动起来是有意义的。 - Peter G.
2个回答

2

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

例如,使用Maven时:

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

这可能就是问题所在,经过快速检查,我发现我的 pom.xml 使用的是 1.3.2 版本。 - Peter G.
@Peter:我从这里下载了es文件--sudo wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-2.2.0.tar.gz,但不确定在哪里可以找到pom.xml文件。 - user1050619
@user1050619 这个 pom.xml 文件只在您使用 Maven 管理应用程序依赖项时才相关。如果您手动处理 jar 文件,则请确保客户端 jar 的版本与运行的 Elasticsearch 集群相同。 - Tim Van Laer

0
这种情况发生在任何 >2.x Elasticsearch 实例中,只要仍有 1.x 的机器在同一网络上查找集群(它会发送错误的协议信息)。从技术上讲,您可以忽略它(它只是告诉您 1.x 机器尝试连接但进行了无效连接),但是如果您长时间不理睬,可能会填满日志等。最好的解决方案是将旧的 1.x 节点与新节点隔离,直到完成升级为止。
参见:https://github.com/elastic/elasticsearch/issues/14400

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接