0

我最近有一个副本集成员几天不同步。使用“重新同步一个非常陈旧的副本集成员”指令,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 } }

这些是相同的主机(有问题的辅助机器)。我的理解是这应该显示一个条目,但如果没有更好地了解它跟踪的内容和更新方式,我会犹豫要不要触摸它。

4

1 回答 1

0

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

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

于 2012-09-13T21:43:50.490 回答