mercredi 7 octobre 2015

Unable to connect to mongodb on AWS instance - com.mongodb.MongoSocketOpenException

I have installed mongodb on one AWS EC2 instance and connecting to it from another AWS EC2 instance, both on same security group and network. Below is the program I have written to connect and insert collection to mongodb.

import com.mongodb.BasicDBObject;
import com.mongodb.BulkWriteOperation;
import com.mongodb.BulkWriteResult;
import com.mongodb.Cursor;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.ParallelScanOptions;
import com.mongodb.ServerAddress;
import java.lang.*;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
import static java.util.concurrent.TimeUnit.SECONDS;

public class test
{
public static void main(String v[]) throws InterruptedException{

Logger mongoLogger = Logger.getLogger( "com.mongodb" );
mongoLogger.setLevel(Level.SEVERE);

MongoClient mongoClient = new MongoClient( "54.67.99.149" , 27017 );
DB db = mongoClient.getDB( "mydb" );
DBCollection coll = db.getCollection("projecttest");
for (int i=0; i < 100; i++) {
    coll.insert(new BasicDBObject("i", i));
        Thread.sleep(1000);
}

System.out.println("Total objects = "+ coll.getCount());

DBCursor cursor = coll.find();
try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}
}
}

When executing the class generated i get the below exceptions.

> java -cp .:mongo-java-driver-3.0.4.jar project.test Oct 07, 2015
> 11:12:23 PM com.mongodb.diagnostics.logging.JULLogger log INFO:
> Cluster created with settings {hosts=[54.67.99.149:27017],
> mode=SINGLE, requiredClusterType=UNKNOWN,
> serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} Oct 07, 2015
> 11:12:24 PM com.mongodb.diagnostics.logging.JULLogger log INFO:
> Exception in monitor thread while connecting to server
> 54.67.99.149: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:127)
>         at java.lang.Thread.run(Thread.java:745) Caused by: java.net.ConnectException: Connection refused
>         at java.net.PlainSocketImpl.socketConnect(Native Method)
>         at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
>         at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
>         at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
>         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
>         at java.net.Socket.connect(Socket.java:579)
>         at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
>         at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
>         ... 3 more
> 
> Oct 07, 2015 11:12:24 PM com.mongodb.diagnostics.logging.JULLogger log
> INFO: No server chosen by PrimaryServerSelector from cluster
> description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE,
> all=[ServerDescription{address=54.67.99.149:27017, type=UNKNOWN,
> state=CONNECTING, exception={com.mongodb.MongoSocketOpenException:
> Exception opening socket}, caused by {java.net.ConnectException:
> Connection refused}}]}. Waiting for 30000 ms before timing out
> Exception in thread "main" com.mongodb.MongoTimeoutException: Timed
> out after 30000 ms while waiting for a server that matches
> PrimaryServerSelector. Client view of cluster state is {type=UNKNOWN,
> servers=[{address=54.67.99.149:27017, type=UNKNOWN, state=CONNECTING,
> exception={com.mongodb.MongoSocketOpenException: Exception opening
> socket}, caused by {java.net.ConnectException: Connection refused}}]
>         at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:370)
>         at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
>         at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
>         at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
>         at com.mongodb.binding.ClusterBinding.getWriteConnectionSource(ClusterBinding.java:68)
>         at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:175)
>         at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:106)
>         at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.java:58)
>         at com.mongodb.Mongo.execute(Mongo.java:747)
>         at com.mongodb.Mongo$2.execute(Mongo.java:730)
>         at com.mongodb.DBCollection.executeWriteOperation(DBCollection.java:327)
>         at com.mongodb.DBCollection.insert(DBCollection.java:323)
>         at com.mongodb.DBCollection.insert(DBCollection.java:314)
>         at com.mongodb.DBCollection.insert(DBCollection.java:284)
>         at com.mongodb.DBCollection.insert(DBCollection.java:250)
>         at com.mongodb.DBCollection.insert(DBCollection.java:187)
>         at project.test.main(test.java:45)

Can anyone please help me know what the problem is. I did try iptables --flush on EC2 instances to stop the firewalls. The EC2 instance security group has inbound port set to 27017 and allows SSH connections.




Aucun commentaire:

Enregistrer un commentaire