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

这篇文章将为大家详细讲解有关mongodb如何借助一致性全备份加oplogs来添加新节点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联主要从事成都做网站、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务南岔,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

一致性备份+oplogs

如果采用直接rs.add的方法添加新节点,需要保证oplog不被覆盖并且需要评估同步oplog的流量影响

问题,所以(一致性备份+oplogs)是我们通常进行横向复制集添加secondary节点的方法,

当数据量大的时候,需要采用下面的方法:

环境描述

主节点 10.9.21.114:27017

两个从节点

10.9.21.178:27017

10.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 liuwenhe

switched to db liuwenhe

MongoDB Enterprise liuhe_rs:PRIMARY> for (var i = 0; i < 100000; i++) {     db.hezi.insert({id: 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.conf

about to fork child process, waiting until server is ready for connections.

forked process: 60522

child 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 local

switched to db local

注释:因为一致性全备份的时候并不会备份local和config库,并且新创建启动的mongod实例的local库下只有startup_log这个集合如下所示:

MongoDB Enterprise > show collections;

startup_log

MongoDB 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.bson

2019-12-13T22:29:33.370+0800    checking for collection data in /data/mongodb/backup/backup/oplog.bson

2019-12-13T22:29:33.371+0800    restoring local.oplog.rs from /data/mongodb/backup/backup/oplog.bson

2019-12-13T22:29:33.433+0800    no indexes to restore

2019-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 local

switched to db local

MongoDB 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  local

switched to db local

MongoDB 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 admin

switched to db admin

MongoDB 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 peer

server 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.conf

about to fork child process, waiting until server is ready for connections.

forked process: 64136

child 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:27017

syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)

0 secs (0 hrs) behind the primary

source: 10.9.21.179:27017

syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)

0 secs (0 hrs) behind the primary

source: 10.9.21.115:27017

syncedTo: Fri Dec 13 2019 22:39:59 GMT+0800 (CST)

0 secs (0 hrs) behind the primary

3.在32.115上查看hezi的集合的数据量,这个是最关键的验证,因为你一致性备份的时候,同时还有操作,如果数据量是一样的,那么也就证明,你的21.115节点添加是没有问题了,数据开始同步了

MongoDB Enterprise liuhe_rs:SECONDARY> rs.slaveOk()

MongoDB Enterprise liuhe_rs:SECONDARY> use liuwenhe

switched to db liuwenhe

MongoDB Enterprise liuhe_rs:SECONDARY> db.hezi.count()

221323

在21.114上查看hezi集合的数据量:

MongoDB Enterprise liuhe_rs:PRIMARY> use liuwenhe

switched to db liuwenhe

MongoDB Enterprise liuhe_rs:PRIMARY> db.hezi.count()

221323

对比发现数据是一样的,说明添加节点的工作完成了。。。

关于mongodb如何借助一致性全备份加oplogs来添加新节点就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享名称:mongodb如何借助一致性全备份加oplogs来添加新节点-创新互联
本文URL:http://scyanting.com/article/coddjc.html