MongoDB-moveChunk中止后Balancer被锁定,元数据事件未记录-如何恢复



由于致命断言错误,我们在辅助中遇到问题,moveChunk无法在此辅助中复制。主mongod在日志中报告了故障(请参阅下面的日志),但自从mongos/mongoc重新启动以来,这些信息似乎从未返回过。自那以后,我们已经恢复了故障的辅助,并完全重新启动了整个集群,一切正常,只是平衡器不会运行,因为仍然存在锁,并且我在变更日志集合中看到,故障的moveChunk只有moveChunk.start条目。我已经查看了日志,我非常确信自从我们重新启动集群以来没有发生迁移。运行MongoDB 2.6.1

  • 如何使平衡器重新运行我们是否只是简单地删除锁条目(从mongos中,使用config,db.locks.remove({'_id':'balancer'})
  • 我们是否应该关注变更日志条目我们是否应该删除变更日志中从未完成的moveChunk.start条目?我们应该插入主mongod记录但丢失的中止条目吗

主mongod中显示moveChunk失败的日志:2015-10-28T00:03:26.616-0400[migrateThread]即将记录元数据事件:{_id:"shard1015-10-28T04:03:26-5630490e8d918836ed653d66",服务器:"shard10",客户端Addr:":27017",时间:新日期(1446005006616),内容:"moveChunk.to",ns:"prodAB.Instr_2015_10_26_IntervalRecord",详细信息:{min:{appName:"AlertsAccumulator",ts:new Date(144581760002)},max:{appName:"CES_GI",ts:new Date(1445830500005)},第1步,共5步:1,第2步,共5:0,注意:"已中止"}。。。2015-10-28T00:03:26.616-04000〔migrateThread〕SyncClusterConnection连接到〔spider:43045〕2015-10-28T00:03:26.617-0400[migrateThread]警告:无法连接到138.12.88.115:43045,原因:错误号:111连接被拒绝2015-10-28T00:03:26.617-0400〔migrateThread〕SyncClusterConnection连接失败到:spider:43045错误消息:无法连接到服务器spider:443045(xxx),连接尝试失败。。。2015-10-28T00:03:26.635-0400[migrateThread]未记录配置更改:shard10-2015-10-28T04:03:26-5630490e8d918836ed653d66无法向服务器spider:43045、spider2:43045、spider3:43045进行身份验证2015-10-28T00:03:26.635-0400[migrateThread]错误:迁移失败:waitForReplication已调用,但不再是master2015-10-28T00:03:26.635-04000[migrateThread]警告:无需忘记挂起的区块[{appName:"AlertsAccumulator",ts:new Date(144581760002)},{appName:"CES_GI",ts:new Date(1445830500005)}),因为prodAB.Instr_2015_10_26_IntervalRecord的本地元数据已更改

变更日志集合中的条目:

mongos> db.changelog.find({ns: "prodAB.Instr_2015_10_26_IntervalRecord", what: /^moveChunk./, "details.min.appName": "AlertsAccumulator"})
{ "_id" : "shard09-2015-10-28T02:14:41-56302f917c97e85c20d69b55", 
"server" : "shard09", 
"clientAddr" : "xxx", 
"time" : ISODate("2015-10-28T02:14:41.265Z"), 
"what" : "moveChunk.start", 
"ns" : "prodAB.Instr_2015_10_26_IntervalRecord", 
"details" : { "min" : { "appName" : "AlertsAccumulator", "ts" : ISODate("2015-10-26T00:00:00.002Z") }, 
"max" : { "appName" : "CES_GI", "ts" : ISODate("2015-10-26T03:35:00.005Z") }, 
"from" : "rs10", "to" : "rs1" } }

根据我们在MongoDB 2.6.1集群中所做的工作,回答我自己的问题:

  • 验证了没有发生迁移,我们通过检查mongos日志和碎片的mongod日志来做到这一点。还检查了正在进行的操作
  • 在继续之前,我们对集群元数据进行了备份,说明位于https://docs.mongodb.org/v2.6/tutorial/backup-sharded-cluster-metadata/
  • 我们通过从mongos:执行删除了锁

    use config
    db.locks.remove({'_id': 'balancer'})
    
  • 我们能够使用sh.startBalancer()再次启动平衡器

看起来变更日志中的额外条目根本不重要。我应该注意的是,我们选择禁用某些集合的平衡,我们知道我们很快就会删除这些集合,并且不想在此时承担额外的平衡负担,有关如何禁用特定集合的平衡的更多信息,请访问:https://docs.mongodb.org/v2.6/tutorial/manage-sharded-cluster-balancer/

最新更新