2016-05-06 5 views
0

MongoDBのレプリケーション機能を探求していますが、単純なシナリオを明確にしたいだけです。MongoDBのレプリケーションが動作しない

私はJavaプログラムを持っています。これは、3つのインスタンスのレプリカセットで常にdbに値を挿入しています。これで、プライマリのJavaプログラムをシャットダウンしてioexceptionをスローして終了します。私はmongoシェルを使用して新しいプライマリが選択され、すべてが正常であることがわかりますが、新しいプライマリが選択されたときに選挙後に挿入し続けるべきではありません。

May 06, 2016 10:13:26 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Closed connection [connectionId{localValue:4, serverValue:10}] to akhurraml2:27017 because there was a socket exception raised on another connection from this pool. 
May 06, 2016 10:13:26 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Exception in monitor thread while connecting to server akhurraml2:27017 
com.mongodb.MongoSocketOpenException: Exception opening socket 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) 
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:142) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
    ... 3 more 

May 06, 2016 10:13:27 AM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Closed connection [connectionId{localValue:6}] to akhurraml2:27017 because there was a socket exception raised by this connection. 
Exception in thread "main" com.mongodb.MongoSocketOpenException: Exception opening socket 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) 
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) 
    at com.mongodb.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:46) 
    at com.mongodb.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:381) 
    at com.mongodb.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:96) 
    at com.mongodb.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:82) 
    at com.mongodb.connection.DefaultServer.getConnection(DefaultServer.java:72) 
    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:86) 
    at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:228) 
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:221) 
    at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:168) 
    at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:74) 
    at com.mongodb.Mongo.execute(Mongo.java:781) 
    at com.mongodb.Mongo$2.execute(Mongo.java:764) 
    at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:515) 
    at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:306) 
    at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:297) 
    at com.nextcontrols.App.main(App.java:33) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) 
    ... 17 more 
+0

MongoClient DBオプションを設定する場所にコードスニペットを投稿できますか?基本的には、サーバーインスタンスを定義する部分です。 –

+0

MongoClientクライアント=新しいMongoClient(は、Arrays.asList( 新しいserverAddressで( "AKhurramL2"、27017)、 新しいserverAddressに( "AKhurramL2"、27018)、 新しいserverAddressに( "AKhurramL2"、27019))); MongoDatabase database = client.getDatabase( "test"); MongoCollection collection = database.getCollection( "recharge"); collection.drop();for(int i = 0; i <100000; i ++){ ドキュメントdoc =新しいドキュメント( "reference"、 "+ i).append(" owner "、" a "+ i); collection.insertOne(doc); \t Thread.sleep(5000); } } – B2C

答えて

0

アービターは、データのコピーを保持しないノードです。しかし、現在のプライマリが利用できない場合、プライマリを選択する選挙ではアービタが役割を果たします。他の2つのノードがアービターではないと確信していますか?

+0

mongoシェルを使って普通のノードであると確信しています。私は新しいプライマリが選択されているのを見て、別のノードに接続すればrs.slaveOk()を実行した後にデータを見ることができます。私は同じコマンドを使用してすべてのノードを開始しています。 mongod --replSet m101 --dbpath/data/rs1 --port 27017 – B2C

0

次のコードを追加すると例外が処理されます。フェールオーバーが発生するまで待ってから挿入を再試行します。

try{ 
    collection.insertOne(doc); 

    }catch (Exception e){ 

     System.out.println(e); 
    } 
関連する問題