【问题标题】:Hazelcast in Docker in boot2docker "Error while fetching cluster partition table"Hazelcast in Docker in boot2docker“获取集群分区表时出错”
【发布时间】:2015-04-01 21:12:59
【问题描述】:

我的设置:Hazelcast docker container 在 boot2docker vm 中运行(托管在 Windows 上,是的,端口 5701 被转发)。 那是 Hazelcast 3.4.2。

当我尝试将一个简单的 java 客户端连接到这个 hazelcast 实例时,我得到一个:

avr. 01, 2015 10:52:03 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is STARTING
avr. 01, 2015 10:52:04 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is STARTED
avr. 01, 2015 10:52:06 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is CLIENT_CONNECTED
avr. 01, 2015 10:52:06 PM     com.hazelcast.client.spi.impl.ClusterListenerThread
INFOS: 

Members [1] {
    Member [172.17.42.1]:5701
}

avr. 01, 2015 10:53:46 PM com.hazelcast.client.spi.ClientPartitionService
GRAVE: Error while fetching cluster partition table!
java.io.IOException: java.util.concurrent.TimeoutException
    at     com.hazelcast.client.connection.nio.ClientConnectionManagerImpl.getOrConnect(Cli    entConnectionManagerImpl.java:337)
...

Exception in thread "main" java.lang.IllegalStateException: Cannot get initial partitions!
at com.hazelcast.client.spi.impl.ClientPartitionServiceImpl.getInitialPartitions(ClientPartitionServiceImpl.java:89)
at com.hazelcast.client.spi.impl.ClientPartitionServiceImpl.start(ClientPartitionServiceImpl.java:65)
at com.hazelcast.client.impl.HazelcastClientInstanceImpl.start(HazelcastClientInstanceImpl.java:189)
at ...
avr. 01, 2015 10:56:35 PM com.hazelcast.client.spi.impl.ClusterListenerThread
AVERTISSEMENT: Error while listening cluster events! -> ClientConnection{live=true, writeHandler=com.hazelcast.client.connection.nio.ClientWriteHandler@3a2f22ed, readHandler=com.hazelcast.client.connection.nio.ClientReadHandler@6b7cdede, connectionId=1, socketChannel=DefaultSocketChannelWrapper{socketChannel=java.nio.channels.SocketChannel[connected local=/127.0.0.1:64753 remote=/127.0.0.1:5701]}, remoteEndpoint=Address[172.17.42.1]:5701}, Error: java.io.EOFException: Remote socket closed!
avr. 01, 2015 10:56:35 PM com.hazelcast.client.connection.nio.ClientConnection
AVERTISSEMENT: Connection [null] lost. Reason: Socket explicitly closed
avr. 01, 2015 10:56:35 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is CLIENT_DISCONNECTED
avr. 01, 2015 10:56:43 PM com.hazelcast.client.spi.impl.ClusterListenerThread
AVERTISSEMENT: Unable to get alive cluster connection, try in 0 ms later, attempt 1 of 2.
avr. 01, 2015 10:56:50 PM com.hazelcast.client.spi.impl.ClusterListenerThread
AVERTISSEMENT: Unable to get alive cluster connection, try in 0 ms later, attempt 2 of 2.
avr. 01, 2015 10:56:50 PM com.hazelcast.client.spi.impl.ClusterListenerThread
GRAVE: Error while connecting to cluster!
java.lang.IllegalStateException: Unable to connect to any address in the config! The following addresses were tried:[/127.0.0.1:5701, /172.17.42.1:5701, /127.0.0.1:5702, /127.0.0.1:5703]
    at com.hazelcast.client.spi.impl.ClusterListenerThread.connectToOne(ClusterListenerThread.java:286)
    at com.hazelcast.client.spi.impl.ClusterListenerThread.run(ClusterListenerThread.java:89)
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:111)
    at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl$ConnectionProcessor.call(ClientConnectionManagerImpl.java:386)
    at com.hazelcast.client.connection.nio.ClientConnectionManagerImpl$ConnectionProcessor.call(ClientConnectionManagerImpl.java:353)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:57)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)
    at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:76)
    at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:92)

avr. 01, 2015 10:56:50 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is SHUTTING_DOWN
avr. 01, 2015 10:56:50 PM com.hazelcast.core.LifecycleService
INFOS: HazelcastClient[hz.client_0_test][3.4.2] is SHUTDOWN

总结一下:客户端似乎看到了集群及其成员,但接下来发生的事情阻止了连接按预期工作。

有什么想法吗?

【问题讨论】:

  • 更多上下文:这与java客户端有关,REST客户端在同一个用例中完美运行
  • 你是否转发了windows主机上的端口,在boot2docker和Dockerfile中的EXPOSEed?

标签: java docker hazelcast boot2docker


【解决方案1】:

我猜你的问题是,Hazelcast 节点的内部地址和外部地址不同,即使由于 NAT 可以到达该节点,该节点也拒绝接受公共地址上的请求。 您可以使用以下配置配置公共地址:http://docs.hazelcast.org/docs/3.4/manual/html-single/hazelcast-documentation.html#public-address(参见上面的示例)。

【讨论】:

  • 我已经尝试过类似的事情,但没有运气(但我会再试一次)。
  • 所以在我的情况下,即使容器没有绑定此 IP,我也必须将公共地址设置为 boot2docker vm 的 ip(类似于 10.0.2.15)? gist.github.com/looztra/c1e3f6256642a3067961 提供的配置和日志不适用于我
  • 是的,您肯定有不同的问题,因为您的客户可以连接、获得授权并获得会员地址。这很奇怪。也可以添加服务器源吗?
  • 我用一些信息更新了要点的内容。服务器通过gist.github.com/looztra/… 启动,即只需调用提供的 com.hazelcast.core.server.StartServer
  • 您好,我也遇到了同样的问题,我不太明白您是如何解决的。你能帮我吗...我无法弄清楚如何在我的 docker 控制台上打开 hazel-server.sh?