【问题标题】:mongodb c++ replica set getScopedDbConnection crashmongodb c++副本集getScopedDbConnection崩溃
【发布时间】: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


    【解决方案1】:

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

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

    参考client/dbclientinterface.h: ConnectionString 处理解析连接到 mongo 的不同方式和确定方法 foo/server:port,server:port 设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多