
<a href="/go/1/6?postion=1" target="_blank">云数据库 mongodb 版</a>
基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化。并提供专业的数据库在线扩容、备份回滚、性能优化等解决方案。
<a href="/go/1/6?postion=1" target="_blank">了解更多</a>
看到这个消息,我的第一反应是重新翻出尘封已久的ipad,装上炉石准备上线领补偿。等等,作为一个数据库行业从业人员,是不是还应该干点什么?恩,很有必要再重新审视一下我们的数据库有没有做好容灾,否则,今天你看别人热闹,明天可能就别人看你热闹了。借此机会我想给大家普及一下mongodb数据库的备份和恢复手段(当然炉石传说应该不一定是使用mongodb作为数据库),以帮助大家做好容灾,过个好年。同时,我也为我们阿里云mongodb服务做下广告,我们的mongodb服务拥有完善的自动备份/恢复功能,灵活的备份策略,好用的恢复到任意时间点功能。我们的备份存放了多份副本,可靠性达10个9,请大家放心使用!
mongodump执行过程由于会遍历所有数据,因此会对mongodb性能有影响,最好在备节点执行(最好是hidden,需检查备节点数据同步是否正常)。
在mongodump执行过程中由于数据库还有新的修改,直接运行dump出来的结果不是一个一致的快照,需要使用一个『--oplog』的选项来将这个过程中的oplog也一块dump下来(使用mongorestore进行恢复时对应要使用--oplogreplay选项对oplog进行重放)。而由于mongodb的oplog是一个固定大小的特殊集合,当oplog集合达到配置的大小时旧的oplog会被滚掉以为新的oplog腾出空间。在使用『--oplog』选项进行dump时,mongodump会在dump集合数据前获取当时最新的oplog时间点,并在集合数据dump完毕之后再次检查这个时间点的oplog是否还在,如果dump过程很长,oplog空间又不够,oplog被滚掉就会dump失败。因此在dump前最好检查一下oplog的配置大小以及目前oplog的增长情况(可结合业务写入量及oplog平均大小进行粗略估计),确保dump不会失败。目前我们阿里云mongodb服务针对oplog做了弹性扩缩容的优化,能够确保在逻辑备份过程中oplog不被滚掉,一定能够备份成功。
对于集合数据,mongodump出来的结果是一个个bson文件。而对于集合的索引,则是描述在一个metadata的json文件里,里面还包含创建集合时所使用的选项。在使用mongorestore进行恢复时,会在集合数据恢复完毕之后进行对应的索引创建。
对于数据量很大的场景,如果使用mongodump/mongorestore进行备份和恢复,需要的时间可能会很长。对于备份来说,最主要的问题就是备份所需时间越长,oplog被滚掉的几率就越大,备份失败的几率也就越大。而对于恢复来说,由于恢复过程还涉及到索引的创建,如果除了数据量大,还有很多索引,所需花费的时间就更长了。遇到像炉石这种数据灾难,恢复时间当然是越短越好,毕竟在游戏行业分分钟的流水都很可观。这时候就需要物理备份出场了,物理备份,顾名思义就是通过物理拷贝数据文件实现备份。在恢复时可以直接使用物理备份拷贝出来的数据文件,直接启动mongod。物理备份最大的好处是速度快,恢复时也不需要再建索引。
通过mongoshell执行以下命令以确保所有的写操作都flush到磁盘并禁止新的写入:
利用底层文件系统层或逻辑卷的快照功能对mongodb的数据目录做快照,或直接通过cp、scp、tar等命令拷贝数据目录。
还是在刚才的mongoshell上(这里需要保证和刚刚是同一个连接),执行以下命令以重新允许新的写入:
由于执行db.fsynclock()会加数据库的全局写锁,这时数据库会处于一个不可访问的状态,因此物理备份最好也在备节点上执行(最好是hidden,注意同样需要确保物理备份完成之后节点的oplog能追上主节点)。目前我们阿里云mongodb团队已经研发出了无需停写服务的物理热备份手段,相信很快就可以让大家用上,尽请期待!
mongodb的增量备份可以通过持续抓取oplog来实现,这个目前没有现成的工具可以利用,需要自己代码实现。抓取oplog主要的难题也和使用mongodump进行全量备份一样,需确保要抓取的oplog不被滚掉。目前我们阿里云mongodb服务实现了自动增量备份的功能,结合全量备份可以实现任意时间点恢复功能。
针对这两大难题,我们阿里云mongodb团队研发了不需要停外部写,并且无需关数据迁移的sharding备份手段,能够实现『任意』时间点恢复,这个功能将伴随着即将推出的sharding形态一起推出,尽情期待!
阿里云mongodb服务提供自动备份/恢复功能,默认每天为数据进行全量备份,并且自动抓取oplog进行增量备份。用户可以在控制台自定义备份策略以及进行恢复。
恢复时可以选择某一个备份集或某一个时间点克隆出一个新的实例,可以在新实例上进行数据校验,等校验没问题后切换到新实例。此外,全量备份的数据还提供下载功能,用户也可以选择下载备份集到本地后恢复到一个临时实例进行数据校验。
说了这么多,大家应该对mongodb的备份/恢复手段有了一个大概的认识。如果要图省心,还是建议直接使用阿里云mongodb服务,我们有自动化的备份/恢复服务,灵活的备份策略,只需点点鼠标就能用上任意时间点恢复、物理热备份、sharding备份/恢复这些黑科技,从此不再为数据库容灾发愁,业务你们做,锅有我们来背,还等什么呢,快来试用吧!
