MongoDB - 在moveChunk中止并且未记录元数据事件后锁定平衡器 - 如何恢复

时间:2015-10-29 13:34:33

标签: mongodb

我们遇到了辅助问题,并且由于致命断言错误,moveChunk无法在此辅助中复制。主要的mongod在日志中报告了失败(参见下面的日志)但是这些信息似乎从来没有回到mongos / mongoc,因为那些重启。我们已经恢复了失败的辅助节点,并且已经完全重新启动整个集群并且事情是健康的,除了平衡器不会运行因为仍然存在锁定而且我在changelog集合中看到失败的moveChunk只有moveChunk.start条目。我已经查看了日志,我很确定自从我们重新启动集群后没有发生迁移。运行MongoDB 2.6.1

  • 我们如何让平衡器再次运行?我们只是删除锁定条目(来自mongos,使用config,db.locks.remove({'_ id':'balancer'})?
  • 我们是否应该关注更改日志条目?我们是否应该删除从未完成的changelog中的moveChunk.start条目?我们应该插入主要mongod记录但丢失的中止条目吗?

显示moveChunk失败的主要mongod日志: 2015-10-28T00:03:26.616-0400 [migrateThread]即将记录元数据事件:{_ id:“shard10-2015-10-28T04:03:26-5630490e8d918836ed653d66”,服务器:“shard10”,clientAddr:“:27017 “,time:new Date(1446005006616),what:”moveChunk.to“,ns:”prodAB.Instr_2015_10_26_IntervalRecord“,详情:{min:{appName:”AlertsAccumulator“,ts:new Date(1445817600002)},max:{ appName:“CES_GI”,ts:new Date(1445830500005)},第1步,共5步:1,第2步,共5:0,注意:“aborted”}} ... 2015-10-28T00:03:26.616-0400 [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 errmsg:无法连接到服务器spider:43045(xxx),连接尝试失败 ... 2015-10-28T00:03:26.635-0400 [migrateThread]未记录配置更改:shard10-2015-10-28T04:03:26-5630490e8d918836ed653d66无法对服务器蜘蛛进行身份验证:43045,spider2:43045,spider3:43045 2015-10-28T00:03:26.635-0400 [migrateThread]错误:迁移失败:waitForReplication被调用但不再是master 2015-10-28T00:03:26.635-0400 [migrateThread]警告:无需忘记待处理的块[{appName:“AlertsAccumulator”,ts:new Date(1445817600002)},{appName:“CES_GI”,ts:new Date (1445830500005)})因为prodAB.Instr_2015_10_26_IntervalRecord的本地元数据已更改

changelog集合中的条目:

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" } }

1 个答案:

答案 0 :(得分:0)

基于我们在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()

  • 再次启动平衡器

看起来更改日志中的额外条目根本不重要。我应该注意到,我们选择禁用某些集合的平衡,我们知道这些集合很快将被删除,并且此时不想承担额外的平衡负担,有关如何禁用特定集合的balacing的更多信息:{{3 }}