1

したがって、このページによると: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 プロジェクトを開きます。カウチベース クライアント用の最新の 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 クラスターは、3 つの VM 上の 3 つのノードで構成されています。docker でデプロイします。それらはうまく機能し、SDK のすべての優れた機能を使用する別のアプリケーションがありますが、テストを行っているときに何かが壊れていることがわかりました。

ノード 10.200.0.11 またはノード 10.200.0.12 がダウンしているときに上記のコードを実行すると、すべて問題ありません。3 つのノードすべての詳細を含む素敵な json がコンソールに表示されます。

問題: このコードを実行し、ノード 10.200.0.10 がダウンしている場合、ドキュメントの例で指定されているように、他の 2 つのノードを使用してブートストラップしようとしません。代わりに eception がスローされ、アプリケーションが終了します。

エラー:

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$2.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$2 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

オーケストレーター ノードがクラッシュした場合、既存のノードはそれが使用できなくなったことを検出し、すぐに新しいオーケストレーターを選択して、クラスターが中断することなく動作し続けるようにします。

Cluster オブジェクト内のノード リストの最初のノードへの接続が接続できない場合、他のノードを試行していない可能性があります。バグの可能性はありますか?

4

1 に答える 1

1

既知の問題で、現在修正中です。ここで見つけることができます: https://issues.couchbase.com/browse/JCBC-999

于 2016-11-07T01:10:29.050 に答える