Couchbase 客户端 Java SDK 在第一个没有响应时不使用另一个集群节点
Couchbase Client Java SDK does not use another cluster node when first doesn't respond
所以根据这个页面:http://developer.couchbase.com/documentation/server/current/sdk/java/start-using-sdk.html
// Connects to a cluster on 10.0.0.1 and tries 10.0.0.2
// if the other one does not respond during bootstrap.
Cluster cluster = CouchbaseCluster.create("10.0.0.1", "10.0.0.2");
似乎很简单,我在 Eclipse 中打开了一个 Maven 项目。为 couchbase 客户端使用最新的 Java SDK:
<dependency>
<groupId>com.couchbase.client</groupId>
<artifactId>java-client</artifactId>
<version>2.3.4</version>
</dependency>
我的代码,简短而有趣:
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
public class Main {
public static void main(String[] args){
Cluster cluster = CouchbaseCluster.create("10.200.0.10", "10.200.0.11", "10.200.0.12");
System.out.println(cluster.clusterManager("Administrator", "password").info().raw());
}
}
我的 Couchbase 集群由三个虚拟机上的三个节点组成。部署 docker。它们工作得很好,我有另一个应用程序使用了 SDK 中的所有强大功能,但我在测试时发现了一些问题:
如果我 运行 在节点 10.200.0.11 or/and 节点 10.200.0.12 关闭时执行上述代码,一切都很好。我在控制台中得到一个很好的 json,包括所有三个节点的详细信息!
问题:
如果我 运行 此代码和节点 10.200.0.10 已关闭,则它不会尝试 bootstrap 使用其他两个节点,如其文档中的示例中所述。相反,抛出异常并结束应用程序。
错误:
WARNING: [null][ConfigEndpoint]: Could not connect to remote socket.
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Connection refused: /10.200.0.10:8091
at com.couchbase.client.core.utils.Blocking.blockForSingle(Blocking.java:85)
at com.couchbase.client.java.cluster.DefaultClusterManager.info(DefaultClusterManager.java:59)
at com.couchbase.client.java.cluster.DefaultClusterManager.info(DefaultClusterManager.java:54)
at quickTestDeleteThis.Main.main(Main.java:10)
Caused by: java.net.ConnectException: Connection refused: /10.200.0.10:8091
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at com.couchbase.client.deps.io.netty.channel.socket.nio.NioSocketChannel.do FinishConnect(NioSocketChannel.java:223)
at com.couchbase.client.deps.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:285)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:589)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:513)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:427)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:399)
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:140)
at com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
at java.lang.Thread.run(Thread.java:745)
Nov 02, 2016 4:45:22 PM com.couchbase.client.core.endpoint.AbstractEndpoint operationComplete
WARNING: [null][ConfigEndpoint]: Could not connect to remote socket.
我认为这可能与 10.200.0.10 作为协调器有关,并且没有新的协调器响应集群信息。
但根据 Couchbase 架构文档:
http://www.couchbase.com/sites/default/files/uploads/all/whitepapers/Couchbase_Server_Architecture_Review.pdf
如果编排器节点崩溃,现有节点将检测到它不再可用,并会选举一个新的
orchestrator 立即使集群继续运行而不会中断。
似乎如果无法连接到 Cluster 对象节点列表中的第一个节点,那么它不会尝试另一个,可能是错误?
一个已知问题,目前正在修复。可以在这里找到:
https://issues.couchbase.com/browse/JCBC-999
所以根据这个页面:http://developer.couchbase.com/documentation/server/current/sdk/java/start-using-sdk.html
// Connects to a cluster on 10.0.0.1 and tries 10.0.0.2
// if the other one does not respond during bootstrap.
Cluster cluster = CouchbaseCluster.create("10.0.0.1", "10.0.0.2");
似乎很简单,我在 Eclipse 中打开了一个 Maven 项目。为 couchbase 客户端使用最新的 Java SDK:
<dependency>
<groupId>com.couchbase.client</groupId>
<artifactId>java-client</artifactId>
<version>2.3.4</version>
</dependency>
我的代码,简短而有趣:
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
public class Main {
public static void main(String[] args){
Cluster cluster = CouchbaseCluster.create("10.200.0.10", "10.200.0.11", "10.200.0.12");
System.out.println(cluster.clusterManager("Administrator", "password").info().raw());
}
}
我的 Couchbase 集群由三个虚拟机上的三个节点组成。部署 docker。它们工作得很好,我有另一个应用程序使用了 SDK 中的所有强大功能,但我在测试时发现了一些问题:
如果我 运行 在节点 10.200.0.11 or/and 节点 10.200.0.12 关闭时执行上述代码,一切都很好。我在控制台中得到一个很好的 json,包括所有三个节点的详细信息!
问题: 如果我 运行 此代码和节点 10.200.0.10 已关闭,则它不会尝试 bootstrap 使用其他两个节点,如其文档中的示例中所述。相反,抛出异常并结束应用程序。
错误:
WARNING: [null][ConfigEndpoint]: Could not connect to remote socket.
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Connection refused: /10.200.0.10:8091
at com.couchbase.client.core.utils.Blocking.blockForSingle(Blocking.java:85)
at com.couchbase.client.java.cluster.DefaultClusterManager.info(DefaultClusterManager.java:59)
at com.couchbase.client.java.cluster.DefaultClusterManager.info(DefaultClusterManager.java:54)
at quickTestDeleteThis.Main.main(Main.java:10)
Caused by: java.net.ConnectException: Connection refused: /10.200.0.10:8091
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at com.couchbase.client.deps.io.netty.channel.socket.nio.NioSocketChannel.do FinishConnect(NioSocketChannel.java:223)
at com.couchbase.client.deps.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:285)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:589)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:513)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:427)
at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:399)
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.run(SingleThreadEventExecutor.java:140)
at com.couchbase.client.deps.io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
at java.lang.Thread.run(Thread.java:745)
Nov 02, 2016 4:45:22 PM com.couchbase.client.core.endpoint.AbstractEndpoint operationComplete
WARNING: [null][ConfigEndpoint]: Could not connect to remote socket.
我认为这可能与 10.200.0.10 作为协调器有关,并且没有新的协调器响应集群信息。 但根据 Couchbase 架构文档: http://www.couchbase.com/sites/default/files/uploads/all/whitepapers/Couchbase_Server_Architecture_Review.pdf
如果编排器节点崩溃,现有节点将检测到它不再可用,并会选举一个新的 orchestrator 立即使集群继续运行而不会中断。
似乎如果无法连接到 Cluster 对象节点列表中的第一个节点,那么它不会尝试另一个,可能是错误?
一个已知问题,目前正在修复。可以在这里找到: https://issues.couchbase.com/browse/JCBC-999