MongoDB 备份与恢复¶
尽管此前已经做了一些努力,Trove 仍然不提供 MongoDB 的备份或恢复功能。此蓝图旨在支持单实例的备份和恢复。
https://blueprints.launchpad.net/trove/+spec/backups-single-instance-mongodb
之前还有一个蓝图,其中包含了单实例备份 7。
问题描述¶
备份和恢复能力对于最终将 MongoDB 数据存储移出“实验”阶段至关重要。MongoDB 提供了两个实用工具,mongodump 和 mongorestore,它们使用基于 BSON 的文件:高效的、二进制等效于 MongoDB 管理的 JSON 数据。这些实用工具将被用于为 MongoDB 数据存储提供标准的备份和恢复策略,等同于基于 MySQL 的数据存储的 MySQLDump 策略。
提议的变更¶
MongoDB 的一个初始的简单备份和恢复策略将使用 mongodump 和 mongorestore 实用工具的默认参数来实现。为了兼容性,它将避免 3.0 版本提供的新功能(使用 oplogs 的备份),并避免 3.0 版本不再支持的选项(使用直接文件系统访问数据库进行的备份)。
配置¶
MongoDB 的 backup_strategy、backup_namespace 和 restore_namespace 的默认值将更改为指向适当的位置。
数据库¶
无。
公共 API¶
现有 API 没有更改,但此蓝图启用了 backup-create、backup-delete 和 backup-list CLI 命令,可用于 MongoDB 数据存储。
公共 API 安全¶
无。
Python API¶
无 (合并后添加的空部分)
CLI (python-troveclient)¶
无 (合并后添加的空部分)
内部 API¶
无。
Guest Agent¶
MongoDB 客体代理将被修改以支持新的备份和恢复策略。
目前尚不清楚 MongoDB 备份和恢复工具是否直接支持流式传输。有一个开放的 JIRA 工单 5,并且存在一些非官方的第三方工具来支持流式传输 6。这似乎与文档 8 相矛盾,后者表明支持流式传输。如果可以实现和支持流式传输,将使用它,否则备份和恢复将回退到两阶段过程。
备份过程将使用 mongodump 命令直接连接到正在运行的 MongoDB 服务器,并将数据库的内容转储到本地存储,或者如果支持,则压缩并实时传输。备份将被流式传输到 backup_swift_container 配置选项中配置的容器。
恢复过程以相反的方式工作,从对象存储流式传输和解压缩备份到客体,然后使用 mongorestore 命令恢复数据库,或者如果工具支持,则就地流式传输和解压缩。
_perform_restore 和 create_backup 方法在以下位置实现:trove/guestagent/datastore/experimental/mongodb/manager.py
备份和恢复实现将进入各自的策略文件夹:trove/guestagent/strategies/backup/experimental/mongo_impl.py trove/guestagent/strategies/restore/experimental/mongo_impl.py
备选方案¶
从 3.0 版本开始,MongoDB 支持使用 mongodump 命令的 –oplog 选项进行一致的、按时间点快照,用于单服务器部署。在 mongodump 命令启动后提交的操作记录到单独的文件中,并且可以使用 mongorestore 的 –oplogReplay 参数重新播放此文件。由于早期版本的 MongoDB 和分片安装不支持此功能,因此将其留作未来工作:可以轻松地为 MongoDB 3.0 客体实现一个子类化的备份/恢复策略。
此外,MongoDB 文档建议文件系统快照作为执行备份的首选方式 1。这会将问题推送到存储层,因此目前未将其作为任何 Trove 数据存储的备份/恢复策略来实现。之前曾提出过一个规范 2 3,并在邮件列表中进行了讨论 4,但尚未实现。
实现¶
负责人¶
主要负责人:atomic77
基于之前的努力
Ramashri Umale <rumale@ebaysf.com>,Viswa Vutharkar <vpvutharkar@ebaysf.com>
工作项¶
2014 年 10 月 14 日上传的最后一个补丁集的 rebase 到当前的 upstream trove
更改备份/恢复以在正在运行的 MongoDB 上运行,因为 MongoDB 3.0 已弃用 mongodump 的 –journal 和 –dbpath
审查现有的测试用例是否存在差距,并根据需要实施
升级影响¶
无。
依赖项¶
无。
测试¶
用于测试 MySQL 备份/恢复的测试用例将被调整为针对 MongoDB 运行。
文档影响¶
文档应反映 MongoDB 备份/恢复支持单实例。
参考资料¶
- 1
http://docs.mongodb.org/manual/tutorial/backup-with-filesystem-snapshots/
- 2
https://blueprints.launchpad.net/trove/+spec/volume-snapshot
- 3
https://wiki.openstack.org/wiki/Trove/volume-data-snapshot-design
- 4
http://lists.openstack.org/pipermail/openstack-dev/2014-April/032673.html
- 5
- 6
- 7
https://blueprints.launchpad.net/trove/+spec/single-instance-mongodb-ga
- 8
http://docs.mongodb.org/manual/reference/program/mongodump/#bin.mongodump