Mongodb Replica sets 重新同步报错

来源:互联网 发布:淘宝一分钱商品 编辑:程序博客网 时间:2024/06/05 14:13
$err: "getMore executor error: CappedPositionLost CollectionScan died due to position in capped collection being deleted. Last seen record id: RecordId(1564216124)", code: 17406 }
由于记录都是一些日志表,做了capped ,一个节点数据损坏,需要重新同步,同步出现以上错误无法继续同步

这里分析一下原因,oplog也是capped collections,是固定大小的,由于写入太快,老的记录被挤出,同步的过程中,正好有需要同步的数据被挤出,也就是oplog没有了你需要同步的数据,那么就会报以上错误,所以增加oplog大小即可解决以上问题。

注意:这里增加oplog不是修改参数可以实现的

我这里是3个节点的replica sets
192.168.0.66  5285  primary
192.168.0.67  5285  secondary
192.168.0.68  5285  secondary
假如这里192.168.0.68  5285 备节点数据损坏,重建的replica sets的时候报以上错误,那么就需要192.168.0.66  5285,192.168.0.67 5285增加oplog大小
具体如下操作:
在192.168.0.67  5285上的操作:
1.关闭数据库
db.shutdownServer()
2.单节点启动
numactl --interleave=all /data01/mongodb-3.2.1/bin/mongod  -f /data01/mongodb_etc/mongo_5285.conf
3.备份oplog
mongodump -h 127.0.0.1 --db local --collection 'oplog.rs' --port 5285
4.切换到local库下,删除oplog.rs,并重建
use local
db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
db.oplog.rs.drop()
db.runCommand( { create: "oplog.rs", capped: true, size:10000000000 } )
db.oplog.rs.save( db.temp.findOne() )
5.加入到replica sets启动数据库
numactl --interleave=all /data01/mongodb-3.2.1/bin/mongod --replSet=test -f /data01/mongodb_etc/mongo_5285.conf

从节点修改完毕后,修改primary,primary需要手工切换到secondary
如下:
rs.stepDown()
切换后,按照以上步骤修改即可

按照以上,oplog修改完毕,重新启动损坏的节点,顺利同步完成

参考:https://docs.mongodb.com/manual/tutorial/change-oplog-size/
0 0
原创粉丝点击