我已经设置了一个包含4个服务器的副本集。RS102 MongoDB on ReplicaSet
为了测试目的,我使用GridFS编写了一个脚本来填充我的数据库至约150百万行照片。我的照片大约在15KB左右。 (?!这不应该是使用GridFS的对小文件有问题)
后数小时后,有大约5000万行,但我在日志此消息:
replSet error RS102 too stale to catch up, at least from 192.168.0.1:27017
这里是复制集状态:
rs.status();
{
"set" : "rsdb",
"date" : ISODate("2012-07-18T09:00:48Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "192.168.0.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"optime" : {
"t" : 1342601552000,
"i" : 245
},
"optimeDate" : ISODate("2012-07-18T08:52:32Z"),
"self" : true
},
{
"_id" : 1,
"name" : "192.168.0.2:27018",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 64770,
"optime" : {
"t" : 1342539026000,
"i" : 5188
},
"optimeDate" : ISODate("2012-07-17T15:30:26Z"),
"lastHeartbeat" : ISODate("2012-07-18T09:00:47Z"),
"pingMs" : 0,
"errmsg" : "error RS102 too stale to catch up"
},
{
"_id" : 2,
"name" : "192.168.0.3:27019",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 64735,
"optime" : {
"t" : 1342539026000,
"i" : 5188
},
"optimeDate" : ISODate("2012-07-17T15:30:26Z"),
"lastHeartbeat" : ISODate("2012-07-18T09:00:47Z"),
"pingMs" : 0,
"errmsg" : "error RS102 too stale to catch up"
},
{
"_id" : 3,
"name" : "192.168.0.4:27020",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 65075,
"optime" : {
"t" : 1342539085000,
"i" : 3838
},
"optimeDate" : ISODate("2012-07-17T15:31:25Z"),
"lastHeartbeat" : ISODate("2012-07-18T09:00:46Z"),
"pingMs" : 0,
"errmsg" : "error RS102 too stale to catch up"
}
],
"ok" : 1
设定仍然接受DATAS,但我有我的3个服务器“DOWN”我应该如何着手修理(更好不是删除DATAS和重新同步WH呃会过时,但会起作用)?
特别是: 这是因为太剧烈的脚本?这意味着它在生产中几乎从未发生过?
我在CentOS 6上运行,我所有的服务器都有2TB,opfile的大小大概是100GB。对于我有4个成员的事实,你会建议将一个仲裁变成仲裁者?感谢您的详细回复! – 2012-07-18 10:30:35
另外,在插入大约12小时后出现过时的状态,如您所说,意味着我的oplog在12小时后充满了未同步的日志? – 2012-07-18 10:36:34
最后,如果有三台服务器中的一台服务器出现故障,有一台第四台服务器的目的是提供安全保障,那么您建议我们如何将此服务器的角色更改为:仲裁器,延迟,隐藏..? – 2012-07-18 10:40:29