【发布时间】:2014-10-13 04:01:59
【问题描述】:
我在从我的 C++ 应用程序连接到副本集时遇到问题。 如果连接到单个 mongo 实例,一切都很好。但是如果尝试连接到副本集,应用程序会崩溃。 “Crashes”是指进程进入ScopedDbConnection::getScopedDbConnection后就消失了。
下面是我的代码。它是在使用 g++ 编译器运行 Amazon linux 的 EC2 实例上编译的。 我来自 Windows 世界,不知道如何提取有关崩溃的更多信息(例如,堆栈)。
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();
}
从 10gen 提供的预配置映像 (AMI) 安装在 Amazon EC2 上的 MongoDB 服务器,版本为 2.4.9 唯一的变化是设置副本集。
从 MongoDB 源版本 2.4.9 编译的 C++ 驱动程序。 Boost 版本是 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
}
防火墙似乎已正确调整。
非常感谢任何帮助。
【问题讨论】:
标签: mongodb amazon-ec2 mongodb-c