2012-12-23 7 views
0

이 간단한 프로그램에서 기본 노드가 손상되면 복제 세트에 다시 연결하려고합니다. 하지만 작동하지 않습니다 : 기본 노드가 충돌하면이 프로그램은 출력없이 즉시 종료되고 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; 
} 

답변

0

당신은 스스로 mongo_reconnect(conn); 같은 DB 관리 작업을 수행 할 필요가 없습니다, 그리고 MongoDB의 충돌을 야기 할 수있다.

여기에서 Document을 참조하십시오. "Mongodb Replica는 자동 장애 조치 기능을 설정합니다. 기본 노드가 오프라인 상태가되거나 응답이 없으면 원래 세트 구성원의 대부분이 여전히 서로 연결할 수 있으므로이 집합은 새 기본 노드를 선출합니다."

+0

'mongo_reconnect (conn)'를 제거하려고했지만 문제는 변경되지 않았습니다. – user805627

+2

복제본 설정 상태를 전혀 확인할 필요가 없다고 생각합니다. mongodb이 자체적으로 돌볼 것입니다. – coderLMN

+0

나는 Jinzhao에 동의합니다. Mongo가 새로운 기본을 다시 선출하는 동안 당신이 많은 일을하고 있었다면 당신이 처리 할 필요가있는 유일한 것은 아마도 2 ~ 2를 기다릴 것입니다. 그것이 필요한지는 확실하지 않지만 생각할 부분은 있습니다. 새로운 경험을 선발 한 경험이있는 순간이 아닙니다. – ryan1234