当前位置:首页 > 科技  > 软件

一则 MongoDB 副本集迁移实操案例

来源: 责编: 时间:2023-11-28 17:10:31 326观看
导读1背景介绍客户要将生产环境上一套副本集架构的 MongoDB 进行迁移,数据量 240GB 左右。经过测试,全量备份耗时 3.5 小时,恢复耗时 4.5小时。为了减少割接时间,采取全量 + 增量 Oplog 的迁移方式。提前一天进行全备,割接当天

1背景介绍

客户要将生产环境上一套副本集架构的 MongoDB 进行迁移,数据量 240GB 左右。经过测试,全量备份耗时 3.5 小时,恢复耗时 4.5小时。lFr28资讯网——每日最新资讯28at.com

为了减少割接时间,采取全量 + 增量 Oplog 的迁移方式。提前一天进行全备,割接当天只需备份增量的 Oplog 恢复即可,可大幅减少割接窗口。lFr28资讯网——每日最新资讯28at.com

2实操过程

查看 Oplog 信息

检查并评估生产环境 Oplog 的产生信息,以防全量和增量备份期间产生的 Oplog 被覆盖掉。lFr28资讯网——每日最新资讯28at.com

mongo> db.getReplicationInfo(){"logSizeMB" : 20480,"usedMB" : 20374.38,"timeDiff" : 7074665,"timeDiffHours" : 1965.18,"tFirst" : "Fri Feb 24 2023 18:36:32 GMT+0800 (CST)","tLast" : "Wed May 17 2023 15:47:37 GMT+0800 (CST)","now" : "Wed May 17 2023 15:47:43 GMT+0800 (CST)"}

可以看出在 1965.18h 的运行中,产生了 20374.38MB 大小的 Oplog。lFr28资讯网——每日最新资讯28at.com

全量备份

全量备份并拷贝备份期间产生的 Oplog 用来增量还原。lFr28资讯网——每日最新资讯28at.com

#!/bin/bashuser=adminpassword=123host=127.0.0.1port=27017outputdir=/data/mongobak_`date +%F`authenticationdatabase=adminstart_time=`date +%s`mongodump -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplog --gzip -o $outputdirstop_time=`date +%s`duration=$((stop_time-start_time)) echo "Spend times: $duration seconds"

全量恢复

利用全备进行数据恢复。lFr28资讯网——每日最新资讯28at.com

#!/bin/bashstart_time=`date +%s`user=adminpassword=123host=127.0.0.1port=27017authenticationdatabase=adminmongorestore -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplogReplay --gzip /data/mongobak_2023-07-17stop_time=`date +%s`duration=$((stop_time-start_time)) echo "Spend times: $duration seconds"

提取增量备份开始的时间点

全备备份出来的 Oplog,可以利用 bsondump 工具将 bson 转换为 json 格式,查看备份时间产生的最后的 Oplog 的时间戳,根据此时间戳来进行增量的 Oplog 备份。lFr28资讯网——每日最新资讯28at.com

shell> cd /data/ mongobak_2023-07-17shell> mv oplog.bson oplog.bson.gzshell> gzip -d oplog.bson.gzshell> bsondump --pretty oplog.bson > op.json

查看 op.json 文件,找出增量备份开始的时间点。lFr28资讯网——每日最新资讯28at.com

"ts": {          "$timestamp": {                      "t": 1686669429,                      "i": 4          }},

增量备份

备份 Oplog(时间戳大于上一次全备结束时的时间)。lFr28资讯网——每日最新资讯28at.com

#!/bin/bashuser=adminpassword=123host=127.0.0.1port=27017outputdir=/tmp/oplog_`date +%F`authenticationdatabase=adminstart_time=`date +%s`mongodump -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase -d local -c oplog.rs -q '{"ts":{"$gt": {"$timestamp":{"t":1686669429, "i":4}}}}' -o $outputdirstop_time=`date +%s`duration=$((stop_time-start_time)) echo "Spend times: $duration seconds"

增量恢复

#!/bin/bashuser=adminpassword=123host=127.0.0.1port=27017authenticationdatabase=adminstart_time=`date +%s`mongorestore -u$user --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase --oplogReplay  /data/oplog_2023-07-17stop_time=`date +%s`duration=$((stop_time-start_time)) echo "Spend times: $duration seconds"

增量迁移后业务文档数量对比

分别在源端和目标端运行脚本,检查迁移完成后业务数据库下文档数量是否一致。lFr28资讯网——每日最新资讯28at.com

#!/bin/bashuser=adminpassword=123host=127.0.0.1port=27017authenticationdatabase=adminmpid=`pidof mongod`tooldir=`dirname $(ls -l /proc/$mpid/exe | awk '{print $11}')`database=$(echo "show dbs" | $tooldir/mongo -uadmin --host $host --port $port -p$password --authenticationDatabase $authenticationdatabase  --quiet |awk '{print $1}'| sed -E '/^admin$|^config$|^local$/d')for db in $databasedo  collections=$(echo -e "use $db/n show collections" | $tooldir/mongo -u $user --host $host --port $port -p $password  $authenticationdatabase --quiet | sed '/switched to db/d')  for table in $collections  do    count=$(echo -e "use $db/n db.$table.count()" | $tooldir/mongo -u $user --host $host --port $port -p $password  --authenticationDatabase $authenticationdatabase  --quiet | sed '/switched to db/d')    echo "$db.$table have $count documents"  donedone

源端运行结果:

图片图片lFr28资讯网——每日最新资讯28at.com

目标端运行结果:

图片图片lFr28资讯网——每日最新资讯28at.com

3注意事项

  • 使用 secondary 备份时,在割接停止业务后,增量备份前,首先检查下从库与主库的延时,确保主从没有延时,防止备份出的数据和主库不一致。
  • 如果全备时指定了 gzip,在提取时间戳时要重命名 oplog.bson 为 oplog.bson.gz,然后解压,再利用 bsondump 工具解析 bson 文件,否则会报错。

本文链接:http://www.28at.com/showinfo-26-34896-0.html一则 MongoDB 副本集迁移实操案例

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何用 AI 做好会议纪要?看这一篇就够了!

下一篇: 六种常见负载均衡算法

标签:
  • 热门焦点
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • 三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    按照惯例,苹果将继续在今年9月举办一年一度的秋季新品发布会,有传言称发布会将于9月12日举行,届时全新的iPhone 15系列将正式与大家见面,不出意外的话
  • 联想YOGA 16s 2022笔记本将要推出,屏幕支持触控功能

    联想此前宣布,将于11月2日19:30召开联想秋季轻薄新品发布会,推出联想 YOGA 16s 2022 笔记本等新品。官方称,YOGA 16s 2022 笔记本将搭载 16 英寸屏幕,并且是一
Top