CouchDB 备份与恢复¶
在 Trove 中添加 CouchDB 备份和恢复功能的支持。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/couchdb-backup-restore
问题描述¶
CouchDB 是 Trove 支持的 NoSQL 数据库之一。虽然 Trove 提供了备份和恢复的支持,但此功能尚未针对 CouchDB 实现。
提议的变更¶
在 CouchDB 中进行完整备份的推荐方法是对数据文件进行简单的文件系统复制 1。由于 CouchDB 官方不支持增量备份,因此此功能将不会在此版本中实现。
CouchDB 是一种基于文档的数据库系统,每个数据库由多个文档组成,每个文档都是 JSON 结构。在 CouchDB 中,每个文档都与一个修订号相关联。每个数据库都存储为单个 .couch 文件,该文件是追加写入的(每次对文档进行更改时,不会覆盖现有文档,而是创建一个具有更新版本号的新文档)。这使得通过简单地复制此 .couch 文件来执行完整备份变得容易。
以下步骤概述了 CouchDB 的完整备份和恢复过程。
备份过程如下所述
定位要备份的数据库文件。默认情况下,数据库文件位于 /var/lib/couchdb 目录下(此位置将在 /etc/couchdb 目录下的 couchdb 配置文件中指定)。在 CouchDB 中,每个数据库完全包含在一个单独的追加写入文件中。这意味着我们可以在写入时进行备份。
压缩和/或加密数据库文件,并将其流式传输到 Swift 存储。
恢复过程如下所述
从存储流式传输并解压缩备份到数据库文件目录(此位置在 /etc/couchdb 配置文件中指定)
更改文件的所有者为 CouchDB 用户和组
数据库¶
无
公共 API¶
无
公共 API 安全¶
无
Python API¶
无
CLI (python-troveclient)¶
在进行这些更改后,以下命令将对 CouchDB 有效
backup-create
backup-delete
backup-list
create –backup
内部 API¶
无
Guest Agent¶
CouchDB guestagent 将被修改以添加对完整备份和恢复功能的支持。此外,还将添加新的策略来支持这些新功能。
- 将修改以下 guestagent 文件
trove/guestagent/datastore/experimental/couchdb/manager.py
- 并且将添加以下新的策略文件用于 CouchDB
trove/guestagent/strategies/backup/experimental/couchdb_impl.py
trove/guestagent/strategies/restore/experimental/couchdb_impl.py
备选方案¶
由于 CouchDB 官方不支持增量备份,因此替代方法是使用 CouchDB 复制接口。CouchDB 的复制接口支持主-主复制模型,并在数据库级别进行复制。它使用 REST API 在源系统和目标系统上的数据库之间触发复制。如果数据库不在同一系统上,则应以 URI 格式指定源/目标
http://<地址>:<端口>/<数据库名称>
将本地服务器上的数据库 ‘db1’ 复制到 x.x.x.x 服务器上的远程服务器的请求示例是
- curl -X POST -d ‘{“source”:”db1”,”target”:”http://x.x.x.x:5984:db1”}’
当从源系统到目标系统启用数据库的复制时,它使用文档修订号来跟踪差异并检测冲突并解决它。
Dashboard 影响 (UX)¶
待定 (在批准后添加的部分)
实现¶
负责人¶
Mariam John (mariamj@us.ibm.com)
里程碑¶
Mitaka
工作项¶
此功能将只有一个工作项。这包括实现 CouchDB 备份和恢复的策略,并进行必要的 guestagent 更改。这还将包括测试新功能所需的测试用例。
升级影响¶
无
依赖项¶
无
测试¶
添加新的测试用例以测试 CouchDB 的备份和恢复功能
添加新的单元测试以测试新实现的功能
将一个新的 CouchDB 辅助类添加到现有的集成测试框架。
文档影响¶
数据存储文档应更新以反映启用的功能。
附录¶
无