我可以强制副本集PRIMARY识别mongodb中新重新同步的SECONDARY成员的optime吗?

时间:2012-09-13 19:25:00

标签: mongodb replication

我最近有一个副本集成员几天不同步。使用"Resyncing a Very Stale Replica Set Member" instructions,我在辅助计算机上停止mongod,清除数据目录,重新启动进程,然后让计算机重新同步到主数据库。

一切都很完美,或者看起来如此。记录表明同步正常。最终,它显示为完成,导致辅助计算机上的以下rs.status()输出:

# The secondary machine's status for itself and its primary:
{
    "_id" : 0,
    "name" : "myprimary:myport",
    "health" : 1,
    "state" : 1,
    "stateStr" : "PRIMARY",
    "uptime" : 497,
    "optime" : {
        "t" : 1347562257000,
        "i" : 1
    },
    "optimeDate" : ISODate("2012-09-13T18:50:57Z"),
    "lastHeartbeat" : ISODate("2012-09-13T19:00:34Z"),
    "pingMs" : 3
    },
{
    "_id" : 2,
    "name" : "mysecondary:myport",
    "health" : 1,
    "state" : 2,
    "stateStr" : "SECONDARY",
    "optime" : {
        "t" : 1347562257000,
        "i" : 1
    },
    "optimeDate" : ISODate("2012-09-13T18:50:57Z"),
    "self" : true
}

正如预期的那样,这些机器处于同步状态,并共享一个optime值。但主要机器是一个不同的故事。它仍会显示不同步的辅助,即使重新同步完成后主要的高级操作时间已完成。

# The primary machine's status for itself and its secondary:
{
    "_id" : 0,
    "name" : "myprimary:myport",
    "health" : 1,
    "state" : 1,
    "stateStr" : "PRIMARY",
    "uptime" : 497,
    "optime" : {
        "t" : 1347562257000,
        "i" : 1
    },
    "optimeDate" : ISODate("2012-09-13T18:50:57Z"),
    "self" : true
    },
{
    "_id" : 2,
    "name" : "mysecondary:myport",
    "health" : 1,
    "state" : 2,
    "stateStr" : "SECONDARY",
    "optime" : {
        "t" : 1347103757000,
        "i" : 1
    },
    "optimeDate" : ISODate("2012-09-08T11:29:17Z"),
    "lastHeartbeat" : ISODate("2012-09-11T17:27:06Z"),
    "pingMs" : 3
}

我错过了什么?起初我想“等一下”,但是已经差不多一个小时了,数据库在那个时候插入了。我是否可以强制主要检查辅助检查,或者是否需要重新同步它们?

我能在小学找到的唯一真正奇怪的是:

PRIMARY> use local;
PRIMARY> db.slaves.find()
{ "_id" : ObjectId("4f675b909d8e143a90055864"), "host" : "<hostIP>", "ns" : "local.oplog.rs", "syncedTo" : { "t" : 1347395837000, "i" : 1 } }
{ "_id" : ObjectId("50522761212b77e9637ad541"), "host" : "<hostIP>", "ns" : "local.oplog.rs", "syncedTo" : { "t" : 1347562257000, "i" : 1 } }

这些是相同的主机(有问题的辅助机器)。我的理解是这应该显示一个条目,但我不愿意触摸它而不更好地理解它跟踪的内容以及它如何更新。

1 个答案:

答案 0 :(得分:0)

尝试关闭辅助节点,删除主节点的db.slaves集合上的两个条目,然后重新启动辅助节点可能是个好主意。

数据文件是否证实机器是同步的?