2016-06-29 13 views
0

テスト環境でmongoクエリルータに接続しようとしています(テスト用のクエリルータを1つだけセットアップして、3つではなく)レプリカを持たない2つのノードのシャードを指しています)。 mongoシェルを使用してドキュメントを挿入/フェッチすることができます(ドキュメントがシャードされたノードに移動することが確認されています)。しかし、mongoデータベースへの接続をテストしようとすると、出力が下にコピーされます(使用されているコードも下にコピーされます)。私はmongoデータベースv3.2.0とJavaドライバv3.2.2を使用しています(私は非同期APIを使用しようとしています)。javaドライバ経由でmongo shardに接続しています。3.2.2

[info] 14:34:44.562 227 [main] MongoAuthentication INFO - testing 1 
[info] 14:34:44.595 260 [main] cluster INFO - Cluster created with settings {hosts=[192.168.0.1:27018], mode=MULTIPLE, requiredClusterType=SHARDED, serverSelectionTimeout='30000 ms', maxWaitQueueSize=30} 
[info] 14:34:44.595 260 [main] cluster INFO - Adding discovered server 192.168.0.1:27018 to client view of cluster 
[info] 14:34:44.652 317 [main] cluster DEBUG - Updating cluster description to {type=SHARDED, servers=[{address=192.168.0.1:27018, type=UNKNOWN, state=CONNECTING}] 
[info] Outputting database names: 
[info] 14:34:44.660 325 [main] cluster INFO - No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=SHARDED, connectionMode=MULTIPLE, all=[ServerDescription{address=192.168.0.1:27018, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out 
[info] Counting the number of documents 
[info] 14:34:44.667 332 [main] cluster INFO - No server chosen by ReadPreferenceServerSelector{readPreference=primaryPreferred} from cluster description ClusterDescription{type=SHARDED, connectionMode=MULTIPLE, all=[ServerDescription{address=192.168.0.1:27018, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out 
[info] - Count result: 0 
[info] 14:34:45.669 1334 [cluster-ClusterId{value='577414c420055e5bc086c255', description='null'}-192.168.0.1:27018] connection DEBUG - Closing connection connectionId{localValue:1} 

使用される列挙は、設定オプションを読み取り、その呼び出し元にMongoClient参照を渡すための責任がある

final MongoClient mongoClient = MongoClientAccessor.INSTANCE.getMongoClientInstance(); 

    final CountDownLatch listDbsLatch = new CountDownLatch(1); 
    System.out.println("Outputting database names:"); 
    mongoClient.listDatabaseNames().forEach(new Block<String>() { 
     @Override 
     public void apply(final String name) { 
      System.out.println(" - " + name); 
     } 
    }, new SingleResultCallback<Void>() { 
     @Override 
     public void onResult(final Void result, final Throwable t) { 
      listDbsLatch.countDown(); 
     } 
    }); 

に使用されているコードの一部。列挙型自体は、必要に応じてコピーすることもできる他のクラスを呼び出します。私が間違っている可能性がありますか誤解しているかもしれないものに

mongo.client.readPreference=PRIMARYPREFERRED 

任意の考え:私はReadPreference用に構成され、以下のオプションがありますか?目的は、mongos(クエリールーター)を介してシャードに接続して、Mongoのシャードに文書を挿入/フェッチできるようにすることです。

答えて

1

mongoシャード設定(クエリルーター、config、およびシャードとレプリカセット)が正しく構成されていませんでした。設定サーバーのレプリカセットが最初に起動され、mongos(照会ルーター)が起動され、これらの構成サーバーを指していることを確認し、mongoシャードを起動してから、シャードを照会ルーター(mongos)を介して登録するシャーディングが有効になっているためです。明らかに、ドライバがmongos(クエリルータ)プロセスに接続していることを確認してください。

関連する問題