我有一个副本集,我试图升级到更多的内存和升级磁盘空间的主。 于是我在新的主服务器上search了几个磁盘,rsync从一个辅助服务器上的数据,并将其添加到副本集。 检查出rs.status()之后,我注意到所有的辅助节点都在主节点后面大约12小时。 所以当我试图强制新的服务器到主要地点,它将无法正常工作,因为它不是最新的。
这似乎是一个很大的问题,因为如果主要失败,我们至less要12个小时,差不多有48个小时。
oplogs全部重叠,oplogsize相当大。 我唯一能想到的就是我在主服务器上执行了大量的写/读操作,这可能会使服务器处于locking状态,而不能正确追赶。
有没有办法可能迫使中学赶上小学?
目前有5个服务器最后2个replace2个其他节点。 _id为6的节点将被replace为主节点。 距离主要运行时间最远的节点超过了48小时。
{ "set" : "gryffindor", "date" : ISODate("2011-05-12T19:34:57Z"), "myState" : 2, "members" : [ { "_id" : 1, "name" : "10******:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 20231, "optime" : { "t" : 1305057514000, "i" : 31 }, "optimeDate" : ISODate("2011-05-10T19:58:34Z"), "lastHeartbeat" : ISODate("2011-05-12T19:34:56Z") }, { "_id" : 2, "name" : "10******:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 20231, "optime" : { "t" : 1305056009000, "i" : 400 }, "optimeDate" : ISODate("2011-05-10T19:33:29Z"), "lastHeartbeat" : ISODate("2011-05-12T19:34:56Z") }, { "_id" : 3, "name" : "10******:27018", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 20229, "optime" : { "t" : 1305228858000, "i" : 422 }, "optimeDate" : ISODate("2011-05-12T19:34:18Z"), "lastHeartbeat" : ISODate("2011-05-12T19:34:56Z") }, { "_id" : 5, "name" : "10*******:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 20231, "optime" : { "t" : 1305058009000, "i" : 226 }, "optimeDate" : ISODate("2011-05-10T20:06:49Z"), "lastHeartbeat" : ISODate("2011-05-12T19:34:56Z") }, { "_id" : 6, "name" : "10*******:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "optime" : { "t" : 1305050495000, "i" : 384 }, "optimeDate" : ISODate("2011-05-10T18:01:35Z"), "self" : true } ], "ok" : 1 }
看完所有的东西之后,我看到一个错误,这导致我回到了在主服务器上运行的mapreduce,这个问题有: https : //jira.mongodb.org/browse/SERVER-2861 。 因此,当尝试复制时,由于oplog中的错误/损坏操作而无法同步。
为了回答原来的问题(这不会解决OP的问题),我相信强制辅助“赶上”的最好方法是将其从集合中删除并重新添加,但机会是(如在这种情况下),还有其他问题。 检查你的日志。