mongodb如何借助一致性全备份加oplogs来添加新节点


这篇文章将为大家详细讲解有关mongodb如何借助一致性全备份加oplogs来添加新节点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一致性备份+oplogs如果采用直接rs.add的方法添加新节点,需要保证oplog不被覆盖并且需要评估同步oplog的流量影响问题,所以(一致性备份+oplogs)是我们通常进行横向复制集添加secondary节点的方法,当数据量大的时候,需要采用下面的方法:环境描述主节点 10.9.21.114:27017两个从节点10.9.21.178:2701710.9.21.179:27017目标:用一致性快照方式添加第三个从节点10.9.21.115:27017整体步骤简述:1)主节点或者其中一个从节点上进行一致性快照备份;2)从节点上进行一致性快照恢复,仅仅对数据部分进行恢复,暂时不要对oplog进行恢复;3)初始化oplog.rs集合,并恢复oplog记录,恢复oplog记录是为了告诉该节点从哪里去读取主库的oplog,同时如果oplog为空,就会进行initial sync初始化,而初始化的时候会把原来的数据都删除,所以需要恢复oplog;4)初始化local数据库的其他两个集合db.replset.election(告诉目前的主节点是谁),db.system.replset(存储的是副本集节点信息,当添加进去之后可以自行同步主节点数据,也就是说可以不必恢复它)5)修改数据库配置并重启数据库(这一步操作前实例不开启认证模式、复制集的配置);6)用rs.add(“HOST_NAME:PORT”)命令将从节点添加进集群;7).用rs.status()观察同步状态并校验数据的完整和一致性;一.主节点或者其他两个从节点上备份数据,我选择的是一个从节点:首先在主节点执行insert操作,模拟线上的业务,同时也可以作为最后验证节点添加正常的依据:MongoDB Enterprise liuhe_rs:PRIMARY> use liuwenheswitched to db liuwenheMongoDB Enterprise liuhe_rs:PRIMARY> for (var i = 0; i
同时执行备份操作,如下,等我备份完成,前面的插入操作还没有结束![mongod@beijing-fuli-hadoop-04 ~]$ mongodump -h 10.9.21.179 -u liuwenhe -p liuwenhe –authenticationDatabase admin –oplog -o /data/mongodb/backup/二.将备份文件scp到192.168.0.3上并进行恢复:scp -r /data/mongodb/backup mongod@10.9.21.115:/data/mongodb/backup/三.第三个节点以单实例方式启动:备注:需要注释掉以下副本集参数vi /etc/mongod.conf#replication:# oplogSizeMB: 51200# replSetName: liuhe_rs#security:# keyFile: /data/mongodb/config/mongodb.key# authorization: enabled[mongod@beijing-fuli-hadoop-03 /]$ /usr/bin/mongodb/bin/mongod -f /etc/mongod.confabout to fork child process, waiting until server is ready for connections.forked process: 60522child process started successfully, parent exiting四:在10.9.21.115上进行一致性快照恢复:[mongod@beijing-fuli-hadoop-03 /data/mongodb/backup/backup]$ mongorestore –oplogReplay–dir /data/mongodb/backup/backup/五:创建oplog.rs集合并初始化大小;MongoDB Enterprise > use localswitched to db local注释:因为一致性全备份的时候并不会备份local和config库,并且新创建启动的mongod实例的local库下只有startup_log这个集合如下所示:MongoDB Enterprise > show collections;startup_logMongoDB Enterprise > db.createCollection(“oplog.rs”,{“capped”:true,”size”:100000000}){ “ok” : 1 }注释:其中capped:true表示创建的集合是循环覆盖的,限制大小的;创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。size单位是KB六:恢复一致性备份的oplog.rs集合的数据到10.9.21.115:[mongod@beijing-fuli-hadoop-03 /data/mongodb/backup/backup]$ mongorestore -d local -c oplog.rs /data/mongodb/backup/backup/oplog.bson2019-12-13T22:29:33.370+0800 checking for collection data in /data/mongodb/backup/backup/oplog.bson2019-12-13T22:29:33.371+0800 restoring local.oplog.rs from /data/mongodb/backup/backup/oplog.bson2019-12-13T22:29:33.433+0800 no indexes to restore2019-12-13T22:29:33.433+0800 finished restoring local.oplog.rs (1378 documents)2019-12-13T22:29:33.433+0800 done七:需要查询主节点replset.election集合的数据并将这些数据存储到10.9.21.115节点在主节点21.114上的操作:MongoDB Enterprise liuhe_rs:PRIMARY> use localswitched to db localMongoDB Enterprise liuhe_rs:PRIMARY> db.replset.election.find(){ “_id” 免费云主机域名: ObjectId(“5dcfb9112670e3e338d03747”), “term” : NumberLong(7), “candidateIndex” : NumberLong(2) }10.9.21.115节点上保存主节点(21.114)上replset.election集合的数据内容:MongoDB Enterprise > use localswitched to db localMongoDB Enterprise > db.replset.election.save({ “_id” : ObjectId(“5dcfb9112670e3e338d03747”), “term” : NumberLong(7), “candidateIndex” : NumberLong(2) })WriteResult({“nMatched” : 0,”nUpserted” : 1,”nModified” : 0,”_id” : ObjectId(“5dcfb9112670e3e338d03747”)})八:关闭第三个从节点,以副本集方式启动mongodb:MongoDB Enterprise > use adminswitched to db adminMongoDB Enterprise > db.shutdownServer()2019-12-13T22:36:36.935+0800 I NETWORK [js] DBClientConnection failed to receive message from 127.0.0.1:27017 – HostUnreachable: Connection closed by peerserver should be down…九:以副本集方式启动mongodb修改第三个从节点配置,注释去掉:vi /etc/mongod.conf#replication:# oplogSizeMB: 51200# replSetName: liuhe_rs#security:# keyFile: /data/mongodb/config/mongodb.key# authorization: enabled[mongod@beijing-fuli-hadoop-03 ~]$ /usr/bin/mongodb/bin/mongod -f /etc/mongod.confabout to fork child process, waiting until server is ready for connections.forked process: 64136child process started successfully, parent exiting十:主节点执行添加节点操作MongoDB Enterprise liuhe_rs:PRIMARY> rs.add(“10.9.21.115:27017”){“ok” : 1,”operationTime” : Timestamp(1576247871, 1),”$clusterTime” : {“clusterTime” : Timestamp(1576247871, 1),”signature” : {“hash” : BinData(0,”p3g5oVNzyiHogsBYfSCpzrBpIks=”),”keyId” : NumberLong(“6758082305262092289”)}}}十一:验证是否成功:1.rs.status()可以看到刚加入的21.115的状态MongoDB Enterprise liuhe_rs:PRIMARY> rs.status()2.rs.printSlaveReplicationInfo()查看复制的状态,如下可以看到21.115的信息:MongoDB Enterprise liuhe_rs:PRIMARY> rs.printSlaveReplicationInfo()source: 10.9.21.178:27017syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)0 secs (0 hrs) behind the primarysource: 10.9.21.179:27017syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)0 secs (0 hrs) behind the primarysource: 10.9.21.115:27017syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)0 secs (0 hrs) behind the primary3.在32.115上查看hezi的集合的数据量,这个是最关键的验证,因为你一致性备份的时候,同时还有操作,如果数据量是一样的,那么也就证明,你的21.115节点添加是没有问题了,数据开始同步了MongoDB Enterprise liuhe_rs:SECONDARY> rs.slaveOk()MongoDB Enterprise liuhe_rs:SECONDARY> use liuwenheswitched to db liuwenheMongoDB Enterprise liuhe_rs:SECONDARY> db.hezi.count()221323在21.114上查看hezi集合的数据量:MongoDB Enterprise liuhe_rs:PRIMARY> use liuwenheswitched to db liuwenheMongoDB Enterprise liuhe_rs:PRIMARY> db.hezi.count()221323对比发现数据是一样的,说明添加节点的工作完成了。。。关于mongodb如何借助一致性全备份加oplogs来添加新节点就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: SQL Server 2017 AlwaysOn on Linux 配置和维护(1)

1. 介绍Linux平台SQL Server 2017 Alway免费云主机域名sOn可用性组可细分为三种情况:针对高可用性创建需要Pacemaker搭建Linux群集,在Linux群集上的可用性组需要CLUSTER_TYPE = EXTERNAL。仅为读取缩…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/06 11:48
下一篇 01/06 11:48