千家信息网

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

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,这篇文章将为大家详细讲解有关mongodb如何借助一致性全备份加oplogs来添加新节点,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一致性备份+op
千家信息网最后更新 2024年09月24日mongodb如何借助一致性全备份加oplogs来添加新节点

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

一致性备份+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来添加新节点就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

节点 数据 备份 一致 一致性 三个 副本 同时 快照 方式 时候 注释 同步 两个 内容 大小 实例 数据库 方法 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器安全巡查记录 警校信息网络安全监察是网警吗 漂移视频软件开发 网信办让公司做网络安全评价 包含互联网科技公司的基金 南岭软件开发培训 梦幻西游山东3区服务器云空间 安徽苹果软件开发靠谱吗 网络安全屏障怎么处理 甘肃白银公安局网络安全支队 泰格至尊超市软件数据库 夏冰软件开发 什么数据库无法获取学位论文 软件开发总体设计包括 苹果8手机怎么连接服务器 手机银行安全中心服务器异常 打开dns服务器快捷键 北京巧取网络技术有限公司 嵌入式软件开发框架 阿里云数据库开发招聘 石家庄德创网络技术有限公司 服务器系统突然断电有影响吗 数据库的建模 万方数据库其他软件 江西数据库安全箱代理价钱 惠普服务器更换硬盘可以热插拔吗 政府采购服务器 网络安全重保工作总结 设备管理系统数据库设计数据流图 组态王数据库连接
0