MongoDB Hot Backup 测试及痛点
前言
Part1:寫在最前
Percona MongoDB 支持Hot Backup,解決了MongoDB官方版本只能使用mongodump的情況。mongodump在小庫中還好,量上來后,備份恢復都是痛苦的。本文就MongoDB hot backup 備份中的一個bug進行復現和解決。
實戰
Part1:限制
在Percona MongoDB3.2.12版本之前,在進行物理熱備份時,如果配置文件中配置了
directoryPerDB: true
directoryForIndexes: true
這兩個參數的話,那么在執行備份的時候會爆出錯誤:
| 1 2 3 4 5 6 7 8 | [root@HE1?bin]#./mongo?127.0.0.1:27020/admin MongoDB?shellversion:?3.2.11-3.1? connecting?to:127.0.0.1:27020/admin ?? heleitest:PRIMARY>use?admin switched?to?db?admin heleitest:PRIMARY>db.runCommand({createBackup:?1,?backupDir:?"/home/work/backup"}) {?"ok"?:?0,?"errmsg"?:?"boost::filesystem::copy_file:?No?such?file?or?directory:\"/home/mongodb/data/admin/collection/11-6714811575794894766.wt\",\"/home/work/backup/admin/collection/11-6714811575794894766.wt\""} |
Part2:痛點
這個問題會很頭痛,比如生產庫中,MongoDB庫越來越大,促使我們計劃采用hot backup方案,由于起先的庫開啟了這個方式,那么臨時的解決方案是什么樣的呢?
| 1 2 | It?may?be?useful?to?simply?let?a?secondary?initial?sync?with?those?options?off,?then?you?could?take?a?hot?backup?again?to?populate?all?the?other?nodes.?This?is?not?a?solution?but?a?path?to?get?the?production?system?back?into?a?state?you?can?use?the?backups.? please?note?this?assume?production?is?built?to?best?practices?and?is?in?a?replica-set?and?not?a?stand?alone?mongod?process. |
意思是在我們MongoDB常規的復制集中,如果想要備份這個庫,那么首先要下掉一個Secondary,清空數據目錄進行重新復制,這個過程會非常緩慢和復雜。如果僅僅是重啟數據庫的話,會起不來報錯,原因是已經開啟了多路徑存儲數據和索引獨立存儲這兩個選項,而現有版本的hotbackup是不支持這樣的備份方式的。
Part3:方案
好在Percona版本響應給力,在賀春旸老師提出該Bug后,官方在3.2.12-3.2版本便修正了這一問題,使得hot backup的痛點得以解決,例如,原先我需要重新對集群進行關閉參數,導出導入數據,這無疑是一個巨大的工作量,同時會讓數據庫可靠性在不短的時間內都處于較低狀態。而現在,我們僅僅要做的就是升級數據庫,這一問題就能夠得到解決。
Part4:復現
| 1 2 3 4 5 6 | [root@HE1?bin]#?./mongo?127.0.0.1:27020/admin Percona?Server?for?MongoDB?shell?version:?3.2.12-3.2 connecting?to:?127.0.0.1:27020/admin ?? heleitest:PRIMARY>?db.runCommand({createBackup:?1,?backupDir:?"/home/work/backup"}) {?"ok"?:?1?} |
我這里先對之前的3.2.11-3.1版本進行一個升級,如何升級MongoDB數據庫可參考:
http://suifu.blog.51cto.com/9167728/1947035
同時,配置文件中配置了
directoryPerDB: true
directoryForIndexes: true
可以看到,在3.2.12-3.2版本中,備份是沒有任何異常的。
Part5:校驗
我們來看下3.4最新版是否也是正常的
| 1 2 3 4 5 6 | [root@HE1?bin]#?./mongo?127.0.0.1:27020/admin Percona?Server?for?MongoDB?shell?version?v3.4.4-1.4 connecting?to:?mongodb://127.0.0.1:27020/admin Percona?Server?for?MongoDB?server?version:?v3.4.4-1.4 heleitest:PRIMARY>?db.runCommand({createBackup:?1,?backupDir:?"/home/work/backup"}) {?"ok"?:?1?} |
可以看到,最新版也沒有問題。
Part6:Percona 官方升級日志
#PSMDB-123: Fixed the creation of proper subdirectories inside the backup destination directory
賀春旸老師提交的jira
https://jira.percona.com/browse/PSMDB-123
——總結——
感謝賀春旸老師的bug提交,感謝Percona團隊高效的修復速率,開源,讓世界更美好~由于筆者的水平有限,編寫時間也很倉促,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。
?本文轉自 dbapower 51CTO博客,原文鏈接:http://blog.51cto.com/suifu/1948583,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的MongoDB Hot Backup 测试及痛点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SubSonic3.0.0.4.3源码包
- 下一篇: 统一沟通-技巧-13-Lync-Poly