我最近有一个副本集成员几天不同步。使用"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 } }
这些是相同的主机(有问题的辅助机器)。我的理解是这应该显示一个条目,但我不愿意触摸它而不更好地理解它跟踪的内容以及它如何更新。
答案 0 :(得分:0)
尝试关闭辅助节点,删除主节点的db.slaves集合上的两个条目,然后重新启动辅助节点可能是个好主意。
数据文件是否证实机器是同步的?