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
}
防火墙似乎是正确地调谐。
任何帮助,非常感谢。