在这个简单的程序中,我想在主节点崩溃时重新连接到副本集。但这是行不通的:如果主节点崩溃,则该程序将立即终止而没有任何输出,并返回141。我不知道为什么。重新连接到副本集的正确方法是什么?

#include <stdio.h>
#include <mongo.h>

int insertVal(mongo *conn, int val) {
    bson op[1];
    bson_init(op);
    bson_append_int(op, "val", val);
    bson_finish(op);

    int status = mongo_insert(conn, "test.vals", op, NULL);

    bson_destroy(op);
    return status;
}

int main()
{
    mongo conn[1];
    mongo_replset_init(conn, "test");
    mongo_replset_add_seed(conn, "localhost", 27017);
    mongo_replset_add_seed(conn, "localhost", 27018);
    mongo_replset_add_seed(conn, "localhost", 27019);
    int status = mongo_replset_connect(conn);
    if (status != MONGO_OK) {
    return 1;
    }

    for (int i = 0; i < 1000 * 1000; ++i) {
        status = insertVal(conn, i);
        if (status != MONGO_OK) {
            printf("%d\n", status);
            --i;
            mongo_reconnect(conn);
        }
    }

    mongo_destroy(conn);
    return 0;
}

最佳答案

您无需自己执行mongo_reconnect(conn);之类的数据库管理操作,这可能会导致与mongodb的冲突。

请参阅此处的Document。 “ Mongodb副本集具有自动故障转移功能。如果主要数据库脱机或变得无响应,并且大多数原始集合成员仍然可以彼此连接,则该集合将选择一个新的主要数据库。”

关于c - 主节点崩溃时如何重新连接到副本集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14013391/

10-11 07:29