日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

一則 MongoDB 副本集遷移實操案例

來源: 責編: 時間:2023-11-28 17:10:31 222觀看
導讀1背景介紹客戶要將生產環境上一套副本集架構的 MongoDB 進行遷移,數據量 240GB 左右。經過測試,全量備份耗時 3.5 小時,恢復耗時 4.5小時。為了減少割接時間,采取全量 + 增量 Oplog 的遷移方式。提前一天進行全備,割接當天

1背景介紹

客戶要將生產環境上一套副本集架構的 MongoDB 進行遷移,數據量 240GB 左右。經過測試,全量備份耗時 3.5 小時,恢復耗時 4.5小時。vDe28資訊網——每日最新資訊28at.com

為了減少割接時間,采取全量 + 增量 Oplog 的遷移方式。提前一天進行全備,割接當天只需備份增量的 Oplog 恢復即可,可大幅減少割接窗口。vDe28資訊網——每日最新資訊28at.com

2實操過程

查看 Oplog 信息

檢查并評估生產環境 Oplog 的產生信息,以防全量和增量備份期間產生的 Oplog 被覆蓋掉。vDe28資訊網——每日最新資訊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。vDe28資訊網——每日最新資訊28at.com

全量備份

全量備份并拷貝備份期間產生的 Oplog 用來增量還原。vDe28資訊網——每日最新資訊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"

全量恢復

利用全備進行數據恢復。vDe28資訊網——每日最新資訊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 備份。vDe28資訊網——每日最新資訊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 文件,找出增量備份開始的時間點。vDe28資訊網——每日最新資訊28at.com

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

增量備份

備份 Oplog(時間戳大于上一次全備結束時的時間)。vDe28資訊網——每日最新資訊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"

增量遷移后業務文檔數量對比

分別在源端和目標端運行腳本,檢查遷移完成后業務數據庫下文檔數量是否一致。vDe28資訊網——每日最新資訊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

源端運行結果:

圖片圖片vDe28資訊網——每日最新資訊28at.com

目標端運行結果:

圖片圖片vDe28資訊網——每日最新資訊28at.com

3注意事項

  • 使用 secondary 備份時,在割接停止業務后,增量備份前,首先檢查下從庫與主庫的延時,確保主從沒有延時,防止備份出的數據和主庫不一致。
  • 如果全備時指定了 gzip,在提取時間戳時要重命名 oplog.bson 為 oplog.bson.gz,然后解壓,再利用 bsondump 工具解析 bson 文件,否則會報錯。

本文鏈接:http://www.www897cc.com/showinfo-26-34896-0.html一則 MongoDB 副本集遷移實操案例

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何用 AI 做好會議紀要?看這一篇就夠了!

下一篇: 六種常見負載均衡算法

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 建宁县| 靖安县| 南靖县| 玉屏| 永川市| 遵化市| 杨浦区| 荣昌县| 清镇市| 汕头市| 玉溪市| 光泽县| 夏津县| 垣曲县| 宜阳县| 鸡西市| 嵊州市| 诸暨市| 浮山县| 察隅县| 宽甸| 图木舒克市| 岳阳市| 汽车| 兰考县| 洛南县| 石台县| 南通市| 鞍山市| 兴业县| 措美县| 察隅县| 长沙市| 浑源县| 秦皇岛市| 盐山县| 内丘县| 石景山区| 云浮市| 天台县| 佛教|