继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MongoDB Hot Backup 测试及痛点

PIPIONE
关注TA
已关注
手记 1070
粉丝 147
获赞 702


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


这两个参数的话,那么在执行备份的时候会爆出错误:


[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方案,由于起先的库开启了这个方式,那么临时的解决方案是什么样的呢?


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:复现


[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最新版是否也是正常的


[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:官方日志


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




贺春旸老师提交的jira


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




——总结——


感谢贺春旸老师的bug提交,感谢Percona团队高效的修复速率,开源,让世界更美好~由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。




©著作权归作者所有:来自51CTO博客作者dbapower的原创作品,如需转载,请注明出处,否则将追究法律责任

boostfilesystemmongodbMongoDB


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP