MongoDB Hot Backup 測試及痛點

來源:互聯網
上載者:User

標籤:boost   filesystem   mongodb   copy_file   no such file or directory   


650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/9C/36/wKioL1ltqUiiTzA6AAA5puBC1Ro224.png" title="3.png" alt="wKioL1ltqUiiTzA6AAA5puBC1Ro224.png" />

Percona MongoDB Hot Backup 測試及痛點前言

Part1:寫在最前

Percona MongoDB 支援Hot Backup,解決了MongoDB官方版本只能使用mongodump的情況。mongodump在小庫中還好,量上來後,備份恢複都是痛苦的。本文就MongoDB hot backup 備份中的一個bug進行複現和解決。


實戰

Part1:限制

在Percona MongoDB3.2.12版本之前,在進行物理熱備份時,如果設定檔中配置了

directoryPerDB: true

directoryForIndexes: true

這兩個參數的話,那麼在執行備份的時候會爆出錯誤:

[[email protected] bin]#./mongo 127.0.0.1:27020/adminMongoDB shellversion: 3.2.11-3.1 connecting to:127.0.0.1:27020/admin heleitest:PRIMARY>use adminswitched to db adminheleitest: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\""}



Part1:痛點

這個問題會很頭痛,比如生產庫中,MongoDB庫越來越大,促使我們計劃採用hot backup方案,由於起先的庫開啟了這個方式,那麼臨時的解決方案是什麼樣的呢?

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,清空資料目錄進行重新複製,這個過程會非常緩慢和複雜。如果僅僅是重啟資料庫的話,會起不來報錯,原因是已經開啟了多重路徑儲存資料和索引隔離儲存區 (Isolated Storage)這兩個選項,而現有版本的hotbackup是不支援這樣的備份方式的。



Part2:方案

好在Percona版本響應給力,在賀春暘老師提出該Bug後,官方在3.2.12-3.2版本便修正了這一問題,使得hot backup的痛點得以解決,例如,原先我需要重新對叢集進行關閉參數,匯出匯入資料,這無疑是一個巨大的工作量,同時會讓資料庫可靠性在不短的時間內都處於較低狀態。而現在,我們僅僅要做的就是升級資料庫,這一問題就能夠得到解決。



Part3:複現

[[email protected] bin]# ./mongo 127.0.0.1:27020/adminPercona Server for MongoDB shell version: 3.2.12-3.2connecting 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版本中,備份是沒有任何異常的。



Part4:校正

我們來看下3.4最新版是否也是正常的

[[email protected] bin]# ./mongo 127.0.0.1:27020/adminPercona Server for MongoDB shell version v3.4.4-1.4connecting to: mongodb://127.0.0.1:27020/adminPercona Server for MongoDB server version: v3.4.4-1.4heleitest:PRIMARY> db.runCommand({createBackup: 1, backupDir: "/home/work/backup"}){ "ok" : 1 }


可以看到,最新版也沒有問題。



Part5:Percona 官方升級日誌

#PSMDB-123: Fixed the creation of proper subdirectories inside the backup destination directory


賀春暘老師提交的jira

https://jira.percona.com/browse/PSMDB-123


——總結——

感謝賀春暘老師的bug提交,感謝Percona團隊高效的修複速率,開源,讓世界更美好~由於者的水平有限,編寫時間也很倉促,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。


本文出自 “賀磊的技術部落格” 部落格,請務必保留此出處http://suifu.blog.51cto.com/9167728/1948583

MongoDB Hot Backup 測試及痛點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.