时间:2021-07-01 10:21:17 帮助过:2人阅读
2)备份原来的oplog
mongod --port 37017 --dbpath /usr/local/mongodb-linux-x86_64-3.2.0/data
3)复制最新的oplog条目到tmp表
[root@node1 mongodb-linux-x86_64-3.2.0]# mongodump --db local --collection ‘oplog.rs‘ --port 37017 2015-12-27T02:27:40.577+0800 writing local.oplog.rs to dump/local/oplog.rs.bson 2015-12-27T02:27:40.579+0800 done dumping local.oplog.rs (4 documents)
4)删除原来的oplog
[root@node1 mongodb-linux-x86_64-3.2.0]# mongo --port 37017
MongoDB shell version: 3.2.0
connecting to: 127.0.0.1:37017/test
> db.temp.save(db.oplog.rs.find({},{ts:1,h:1}).sort({$natural:-1}).limit(1).next());
WriteResult({ "nInserted" : 1 })
> db.temp.find();
{ "_id" : ObjectId("567edd9e48b1a3ebcf06049c"), "ts" : Timestamp(1451203909, 1), "h" : NumberLong("4300737341732033822") }
5)重建oplog
db.oplog.rs.drop()
6)关闭实例,启动实例为replications sets的成员
db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )
(单位是字节)
db.oplog.rs.save( db.temp.findOne() ) 把temp中oplog保存到新建的oplog中
db.oplog.rs.find()
7)在primary中执行切换primary为secondary:
db.shutdownServer()
mongod --replSet rs0 --dbpath
/usr/local/mongodb-linux-x86_64-3.2.0/data
然后重复以上操作。
rs.stepDown()
此时 m3的优先级最高。如果m3和m1之间的同步进度小于10秒,m1就切换为scondary节点m3就切换为primary节点;如果m3和m1之间的同步进度大于10秒,就先不切换,直接到m3追上m1(进度差小于10秒)
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 0.5
cfg.members[2].priority = 1
rs.reconfig(cfg)
此时全部节点为secondary,没有primary节点!等到m3赶上m1的进度,m3就成了primary节点。
db.adminCommand({replSetStepDown: 86400, force: 1}) 24小时内让其成为主节点
在m1上执行:
mongo
>rs.freeze(120);120秒内不能成为主节点
这时打开m3发现已经成为主节点。
mongo
>rs.stepDown(120);
120秒内不能成为主节点
有延迟的secondary节点也可能显示落后primary节点0秒。原因:主节点的空闲时间大于从节点上的SlaveDelay值。复制间隙产生的原因:
rs0:SECONDARY> rs.printSlaveReplicationInfo();
source: 192.168.75.10:27017
syncedTo: Sun Dec 27 2015 16:11:49 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 192.168.75.11:27017
syncedTo: Sun Dec 27 2015 16:11:49 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
如果两个查询没有返回相同的结果,说明日志有错误:
db = db.getSiblingDB("local")
db.oplog.rs.find().sort({$natural:-1}).limit(1)
db.oplog.rs.find({ts:{$type:17}}).sort({$natural:-1}).limit(1)
更新错误的条目:
第一个查询结果
{ "ts" : {t: 1347982456000, i: 1},
"h" : NumberLong("8191276672478122996"),
"op" : "n",
"ns" : "",
"o" : { "msg" : "Reconfig set", "version" : 4 } }
- 第二个查询结果
{ "ts" : Timestamp(1347982454000, 1),
"h" : NumberLong("6188469075153256465"),
"op" : "n",
"ns" : "",
"o" : { "msg" : "Reconfig set", "version" : 3 } }
db.oplog.rs.update( { ts: { t:1347982456000, i:1 } },
{ $set: { ts: new Timestamp(1347982456000, 1)}})
MongoDB复制二:复制集的管理
标签: