2014-03-27 74 views
0

我有麻烦连接到我的c + +应用程序副本集。 如果连接到单个mongo实例,一切都很好。但是,如果尝试连接到副本集,应用程序会崩溃。 “崩溃”意味着进程在进入ScopedDbConnection :: getScopedDbConnection之后才会消失。mongodb c + +副本集getScopedDbConnection崩溃

以下是我的代码。它是使用g ++编译器在运行Amazon linux的EC2实例上编译的。 我来自Windows世界,不知道如何提取关于崩溃的更多信息(例如堆栈)。从预先配置的图像(AMI)安装在Amazon EC2

void run() 
{ 
    syslog(LOG_INFO, "Before connection"); 

    // scoped_ptr<ScopedDbConnection> conn(ScopedDbConnection::getScopedDbConnection("54.83.49.200")); // works just fine 

    // next line causes a crash 
    scoped_ptr<ScopedDbConnection> conn(ScopedDbConnection::getScopedDbConnection("myreplset/54.83.49.200,54.83.53.241,54.83.52.158")); 

    DBClientBase * client = conn->get(); 

    syslog(LOG_INFO, "After connection"); // newer happens if connecting to replica set 

    do_something(client); 

    conn->done(); 

} 

MongoDB的服务器由提供10gen的和具有版本2.4.9 唯一的变化是设定副本集。

从MongoDB源版本2.4.9编译的C++驱动程序。升级版本是1.53。

副本集配置:

myreplset:PRIMARY> rs.status() 
{ 
     "set" : "myreplset", 
     "date" : ISODate("2014-03-26T22:15:11Z"), 
     "myState" : 1, 
     "members" : [ 
       { 
         "_id" : 0, 
         "name" : "54.83.49.200:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 595, 
         "optime" : Timestamp(1395872014, 1), 
         "optimeDate" : ISODate("2014-03-26T22:13:34Z"), 
         "self" : true 
       }, 
       { 
         "_id" : 1, 
         "name" : "54.83.53.241:27017", 
         "health" : 1, 
         "state" : 2, 
         "stateStr" : "SECONDARY", 
         "uptime" : 95, 
         "optime" : Timestamp(1395872014, 1), 
         "optimeDate" : ISODate("2014-03-26T22:13:34Z"), 
         "lastHeartbeat" : ISODate("2014-03-26T22:15:10Z"), 
         "lastHeartbeatRecv" : ISODate("2014-03-26T22:15:11Z"), 
         "pingMs" : 1, 
         "syncingTo" : "54.83.49.200:27017" 
       }, 
       { 
         "_id" : 2, 
         "name" : "54.83.52.158:27017", 
         "health" : 1, 
         "state" : 7, 
         "stateStr" : "ARBITER", 
         "uptime" : 93, 
         "lastHeartbeat" : ISODate("2014-03-26T22:15:10Z"), 
         "lastHeartbeatRecv" : ISODate("2014-03-26T22:15:10Z"), 
         "pingMs" : 1 
       } 
     ], 
     "ok" : 1 
} 

防火墙似乎是正确地调谐。

任何帮助,非常感谢。

回答

-1

您可以添加端口信息,并尝试:

scoped_ptr<ScopedDbConnection> conn(ScopedDbConnection::getScopedDbConnection("myreplset/54.83.49.200:27017,54.83.53.241:27017,54.83.52.158:27017")); 

参考客户端/ dbclientinterface.h: 的ConnectionString处理解析不同的方式连接到蒙戈和确定方法 富/服务器:端口,服务器:端口SET