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>

里程碑

完成目标里程碑

liberty-1

工作项

  • 2014 年 10 月 14 日上传的最后一个补丁集的 rebase 到当前的 upstream trove

  • 更改备份/恢复以在正在运行的 MongoDB 上运行,因为 MongoDB 3.0 已弃用 mongodump 的 –journal 和 –dbpath

  • 审查现有的测试用例是否存在差距,并根据需要实施

升级影响

无。

依赖项

无。

测试

用于测试 MySQL 备份/恢复的测试用例将被调整为针对 MongoDB 运行。

文档影响

文档应反映 MongoDB 备份/恢复支持单实例。